data.frame中的检查列表包含元素

时间:2016-05-19 13:21:25

标签: r list dataframe

我有一个data.frame,其中一列是一个列表(请参阅此post)我想检查data.frame中哪些列表包含一个元素(让我们说数字3 )目前,我正在循环遍历data.frame的所有行。

df=data.frame(a=1:3,b=I(list(1,3:7,1:3)))
df
for(i in 1:nrow(df)){
     print(3 %in% df$b[[i]])

}

有更优雅的方式吗?

2 个答案:

答案 0 :(得分:0)

我个人喜欢使用map来解决这样的问题,可以找到更多信息here

library(purrr)
df %>% transpose() %>% map(2) %>% map((function(x) 3 %in% x))

给出:

[[1]]
[1] FALSE

[[2]]
[1] TRUE

[[3]]
[1] TRUE

或者,还有 map_lgl ,它返回逻辑数组而不是列表。

df %>% transpose() %>% map(2) %>% map_lgl((function(x) 3 %in% x))

给出:

[1] FALSE  TRUE  TRUE

答案 1 :(得分:-1)

是的,试试这个:

3 %in% unlist(df$b)

结果:

> 3 %in% unlist(df$b)
[1] TRUE

Unlist(df $ b)将df $ b的所有元素连接到一个向量中。

如果您有多列:

> apply(df,2,function(x) 3 %in% unlist(x))
   a    b 
TRUE TRUE