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

add*_*ons 3 intersection r dataframe dplyr

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

> 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
Run Code Online (Sandbox Code Playgroud)

我的列表长度是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)
Run Code Online (Sandbox Code Playgroud)

有没有使用dplyr或任何其他工具做到这一点.

989*_*989 5

试试Reduce基地R:

ls <- vector("list", 10)
for (i in 1:10) ls[[i]] <- head(df.list[[i]]$VarName, 25)
Reduce(intersect, ls)
Run Code Online (Sandbox Code Playgroud)

或者单线代码:

Reduce(intersect, lapply(df.list, function(x) head(x$VarName, 25)))
Run Code Online (Sandbox Code Playgroud)