2017-03-22 5 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, 헤드 (예를 $ varname, 25)), dfList, init = letters)'여기서 init 값은 가능한 범위를 포함합니다. – lmo

+1

고마워요. @Imo, 나는 지금 추가 된 한 줄짜리 코드에 대해 생각하고있었습니다. – 989