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

use*_*688 1 r

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

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

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

[[2]]
[1] "Geometry"

[[3]]
[1] "Geometry" "Quantum Mechanics"   "Algebra"   
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以使用sapply循环遍历list,使用grepl获取逻辑向量,wrap with any只返回TRUE/FALSE每个list元素的单个值.

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

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

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

另一种选择是 is.element

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

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

sapply(df[1:3,]$classes, function(x) any(x == "Algebra"))
Run Code Online (Sandbox Code Playgroud)