2016-08-09 2 views
0

두 개의 다른 열 중 하나에 요소가 포함 된 다른 (더 작은) 데이터 프레임으로 분할하려는 큰 데이터 프레임이 있습니다. I는 아래와 같이 데이터 프레임을 가정두 개의 다른 열 중 하나에 포함 된 요소에 따라 데이터 프레임을 분할하는 방법은 무엇입니까?

v1  v2  v3  v4  v5 
mom dad  2  4  5 
bro mom  5  3  4 
sis dad  3  4  2 
bro sis  3  7  9 

I는 4 개별 데이터 V1 또는 V2의 고유 값 각각에 대하여 하나의 프레임에이를 분할 할. 내가 루프를 사용하여이 작업을 수행 할 수 있었다

$mom 
v1  v2  v3  v4  v5 
mom dad  2  4  5 
bro mom  5  3  4 

$dad 
v1  v2  v3  v4  v5 
mom dad  2  4  5 
sis dad  3  4  2 

$sis 
v1  v2  v3  v4  v5 
sis dad  3  4  2 
bro sis  3  7  9 

$bro 
bro mom  5  3  4 
bro sis  3  7  9 

하지만 쉽게 있도록 나는 각 요소를 통해 기능을 수행하는 최종 출력이리스트가되고 싶어요 : 같은 새로운 데이터 프레임이 보일 것입니다. 내가 사용한 for 루프는 다음과 같다 : (가) "우리는"모두에서 고유 값의 벡터이다 (V1 및 V2) 열 결합

for(i in 1:length(us)){ 
    subset.dataframe <-dataframe[dataframe$v1 == us[i] | dataframe$v2 == us[i],] 
} 

합니다.

제공 할 수있는 도움에 미리 감사드립니다.

+0

-'C (분할 (DF, $ v1의 DF PMAX (안양 $ v2를)), 분할 (DF, PMIN ($ V1 안양, 안양 $ v2를))) ' – thelatemail

답변

2

lapply을 사용하여 us을 반복하고 원래의 데이터 프레임을 부분 집합하여 데이터 프레임 목록을 반환 할 수 있습니다.

us = unique(c(df$v1, df$v2)) 
setNames(lapply(us, function(e) subset(df, v1 == e | v2 == e)), us) 

$mom 
    v1 v2 v3 v4 v5 
1 mom dad 2 4 5 
2 bro mom 5 3 4 

$bro 
    v1 v2 v3 v4 v5 
2 bro mom 5 3 4 
4 bro sis 3 7 9 

$sis 
    v1 v2 v3 v4 v5 
3 sis dad 3 4 2 
4 bro sis 3 7 9 

$dad 
    v1 v2 v3 v4 v5 
1 mom dad 2 4 5 
3 sis dad 3 4 2 
+0

나는이 방법을 사용하여 끝냈다. 나는 이것의 단순함을 정말로 좋아한다. 정보 주셔서 감사합니다. – Brett

+0

(e) 무엇을하고 있는지 물어볼 수 있습니까? 'e'가 더미 변수입니까? – Brett

+0

'function (e) 부분 집합 (df, v1 == e | v2 == e)'이것은 R의 익명 함수입니다.'e'는 함수 매개 변수입니다. 'lapply'를 사용하여 'us'를 반복 할 때 e는 'us'에서 하나씩 값을받습니다. – Psidom

1

우리는 또한 unlist 처음 두 개의 열 에드의 행 인덱스를 얻을 수 arr.ind = TRUEwhich를 사용하고 'DF1'의 행을 부분 집합 다음의 unique 값을 통해 반복하여 수행 할 수 있습니다 df 가정 여기에 데이터 프레임 지나치게-복잡한 코드 부서에서

Un1 <- unique(unlist(df1[1:2])) 
setNames(lapply(Un1, function(nm) df1[which(nm == df1[1:2], 
      arr.ind = TRUE)[,1],]), Un1) 
#$mom 
# v1 v2 v3 v4 v5 
#1 mom dad 2 4 5 
#2 bro mom 5 3 4 

#$bro 
# v1 v2 v3 v4 v5 
#2 bro mom 5 3 4 
#4 bro sis 3 7 9 

#$sis 
# v1 v2 v3 v4 v5 
#3 sis dad 3 4 2 
#4 bro sis 3 7 9 

#$dad 
# v1 v2 v3 v4 v5 
#1 mom dad 2 4 5 
#3 sis dad 3 4 2 
+0

고맙습니다. – Brett

+0

@Brett 메모를 보내 주셔서 감사합니다. 투표 옆에있는 눈금을 클릭하여 최상의 해결책을 수락하십시오. – akrun

관련 문제