从包含数据框的列表中设置交集

set intersection from list containing data frames

我有一个列表,列表中的每个元素都是一个数据框。

> df.list[[1]]
      Change       Diff          VarName
1  10.433354  5.311973e-02         a
2   4.587958  1.517604e-02         b
3   4.566829  1.082679e-02         c
4   4.464458  1.345807e-02         d
5   4.146909  7.758011e-03         e
6   4.141556  1.416043e-02         f

> df.list[[2]]
      Change       Diff          VarName
1  12.443354  5.311973e-02         j
2   3.587958  1.517604e-02         k
3   4.566829  1.082679e-02         a
4   4.464458  1.345807e-02         b
5   3.146909  7.758011e-03         d
6   2.141556  1.416043e-02         e

我的列表长度为 10,其中有 10 个数据框。每个数据框有 30 个项目。我想 intersect 每个数据框的前 25 个数据框与另一个数据框,最后得到所有数据框中最常见的项目。

这是我到目前为止所做的:

df1 <- df.list[[1]]$VarName
df2 <- df.list[[2]]$VarName
df3 <- df.list[[3]]$VarName
df4 <- df.list[[4]]$VarName

intersect(intersect(intersect(df1,df2), df3), df4)

是否可以使用 dplyr 或任何其他工具来做到这一点。

在基数 R:

中尝试 Reduce
ls <- vector("list", 10)
for (i in 1:10) ls[[i]] <- head(df.list[[i]]$VarName, 25)
Reduce(intersect, ls)

或者一行代码:

Reduce(intersect, lapply(df.list, function(x) head(x$VarName, 25)))