2017-03-22 28 views
3

我有一個列表,其中列表中的每個元素都是數據框。從包含數據框的列表中設置交集

> 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或任何其他工具。

回答

5

在基礎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))) 
+0

在一個線,'減少(函數(X,Y)交叉(X,頭(Y $ varname,25)),dfList,init = letters)'init的值包含了可能性的範圍。 – lmo

+1

謝謝@Imo,同時我正在考慮現在添加的單行代碼。 – 989

相關問題