2016-08-25 5 views
0

R에 다른 열 수의 여러 데이터 프레임 목록과 교차하고 일치하는 열이있는 여러 데이터 프레임 목록을 반환하는 함수가 있습니까? 결과 목록을 제공해야합니다R의 데이터 프레임 목록 교차하기

ll <- list(structure(list(V1 = c(8L, 2L, 7L), V2 = c(1L, 9L, 3L), V3 = 4:6), .Names = c("V1", "V2", "V3"), row.names = c(NA, -3L), class = "data.frame"), structure(list(V1 = c(1L, 3L, 2L), V2 = c(5L, 4L, 6L)), .Names = c("V1", "V2"), row.names = c(NA, -3L), class = "data.frame")) 

> ll 
[[1]] 
    V1 V2 V3 
1 8 1 4 
2 2 9 5 
3 7 3 6 

[[2]] 
    V1 V2 
1 1 5 
2 3 4 
3 2 6 

:

> new.ll 
[[1]] 
    V1 V2 
1 8 1 
2 2 9 
3 7 3 

[[2]] 
    V1 V2 
1 1 5 
2 3 4 
3 2 6 

덕분에 나는 다음과 같은 목록을 가지고 예를 들어

.

+0

정합은 ** ** 이름 열을 기반? –

+0

일치하는 항목은 모두 첫 번째 열에서 시작하는 열의 수가 같은 것을 의미합니까? – Phann

+0

예, 일치하는 항목은 열 이름을 기반으로하며 일치하는 모든 항목의 공통 열 수는 같습니다. – alaj

답변

2

더 나은 대안이 있어야합니다. 그러나 지금 당장 나는 이것만을 생각할 수 있습니다.

mincol <- Reduce(intersect, lapply(ll, colnames)) 
lapply(ll, function(x) x[mincol]) 

#[[1]] 
# V1 V2 
#1 8 1 
#2 2 9 
#3 7 3 

#[[2]] 
# V1 V2 
#1 1 5 
#2 3 4 
#3 2 6 

목록의 모든 dataframes에서 만 열 이름을 선택 후 intersect를 사용하여 일반적인 열 이름을 찾기합니다.

1

열 이름을 기반으로하지 않고 열 수 (첫 번째 열로 시작)에 기반한 솔루션입니다. 모든 data.frame의 어떤 data.frame의 열 및 행에 존재하는 최소 크기로 감소된다

ll_new <- lapply(ll, function(y) y[1:min(sapply(ll, function(x) dim(x)[1])), #min number of rows 
            1:min(sapply(ll, function(x) dim(x)[2])]) #min number of cols 
관련 문제