r语言:如何在列表中查找匹配的行?

时间:2015-10-25 17:19:25

标签: r

在R中,如果我的数据框中有一个列,每个行条目都包含一个列表,那么如何在该列表中搜索包含匹配项的那些行?

例如,如何在以下内容中返回包含“Algebra”(例如第1行和第3行)的行的索引:

> df[1:3,]$classes
[[1]]
[1] "Algebra"          "Calculus"

[[2]]
[1] "Geometry"

[[3]]
[1] "Geometry" "Quantum Mechanics"   "Algebra"   

1 个答案:

答案 0 :(得分:5)

我们可以使用sapply循环list,使用grepl获取逻辑向量,使用any换行只返回单个TRUE/FALSE值每个list元素。

sapply(df[1:3,]$classes, function(x) any(grepl('Algebra', x)))
#[1]  TRUE FALSE  TRUE

或者,我们可以使用%in%每个TRUE/FALSE元素只返回一个list

sapply(df[1:3,]$classes, '%in%', x='Algebra')
#[1]  TRUE FALSE  TRUE

另一个选项是is.element

sapply(df[1:3,]$classes, is.element, el='Algebra')
#[1]  TRUE FALSE  TRUE

或者@Richard Scriven提到,可以使用==

sapply(df[1:3,]$classes, function(x) any(x == "Algebra"))