data.frame中的检查列表包含元素
我有一个data.frame,其中一列是一个列表(见下图)。我想检查data.frame中的哪些列表包含元素(比如数字3)。目前,我正在遍历data.frame的所有行data.frame中的检查列表包含元素,r,list,dataframe,R,List,Dataframe,我有一个data.frame,其中一列是一个列表(见下图)。我想检查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]]) } 还有更优雅的方式吗?是的,试试这个: 3 %in% unlist(df$b) 结果是: > 3 %in% unlist(d
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]])
}
还有更优雅的方式吗?是的,试试这个:
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
我个人喜欢用地图来解决这样的问题,可以找到更多的信息 其中:
[[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
您可以使用
apply(df,1,函数(x)3%in%unlist(x[2]))
也可以循环,但可能是“优雅的”。我会选择mapply(`in%`,3,df$b)
或sapply(df$b,函数(x)3%in%x)
或类似的更优雅的东西。我以前没有使用过mapply
。非常好。如果你有一个可行的解决方案,但想知道什么更好,那么这是一个代码审查的问题,而不是StackOverflow。我想他们是在按行(列“b”)查找结果。您的解决方案仅说明3是否出现在某个列中是的,他们正在查找特定列“b”的结果。我知道,第二种解决方案是在多列中的任意位置查找3,而不管该列是否包含列表。他必须先对这些列进行子集划分。
[1] FALSE TRUE TRUE