2017-03-22 2 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) 

または1ライナーコード:

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

一列に、 '(reduce関数(x、y)の交差(X、ヘッド(Yを$ varname、25))、dfList、init = letters) 'initの値には可能な範囲が含まれています。 – lmo

+1

ありがとう@Imo、私は今、追加された1行のコードについて考えていました。 – 989

関連する問題