我有一个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]])
}
有更优雅的方式吗?
答案 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