Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
data.frame中的检查列表包含元素_R_List_Dataframe - Fatal编程技术网

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

我有一个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(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