首页 > 解决方案 > 具有索引向量的子集列表

问题描述

给定向量foo,如何子集列出barwhere 以便bar匹配的索引foo

bar
[[1]]
 [1] "eney"       "e  e"       "sonalisada" "ahorro"     "sio"        "a  ene"     "a"          "ra"         "m"          "ahorro"     ""           "d"          "cre"        "genericos" 
[15] "atención"   "calidad"    "servicio"   "ine"        "iuibue tes" "yrroa"      "su salud"   "ofertas"    "mvil ares"  "u"   

foo
[1]  8 15 17 20 22

输出应该看起来像

[8] "ra"  [15] "atención"  [17] "servicio"  [20] "yrroa" [22] "ofertas"

以下方法不起作用,正确的方法是什么?

which(bar[[1]] == foo)

数据:

dput(foo)
c(8L, 15L, 17L, 20L, 22L)

dput(bar)
list(c("eney", "e  e", "sonalisada", "ahorro", "sio", "a  ene", 
"a", "ra", "m", "ahorro", "", "d", "cre", "genericos", "atención", 
"calidad", "servicio", "ine", "iuibue tes", "yrroa", "su salud", 
"ofertas", "mvil ares", "u"))

标签: rlistvectorsubset

解决方案


bar是一个列表,如果您只有长度为 1 的列表,您可以执行以下操作:

bar[[1]][foo]
#[1] "ra"       "atención" "servicio" "yrroa"    "ofertas" 

或者

unlist(bar)[foo]

如果列表的长度大于 1,并且您想foo从每个可以使用的值中获取值lapply

lapply(bar, `[`, foo)
#Or
#sapply(bar, `[`, foo)

推荐阅读