2017-09-13 2 views
0

나는 몇 가지 필드 (필드 1, FIELD2, FIELD3)R 루프에 의해 데이터 세트에 고유의 복합 키

field1 field2 field3 field4 field5 field6 field7 field8 
1 text text1 segment1 31-Jan-13 2.70 0.21 1.44 1.29 
2 text text1 segment1 01-May-13 0.70 2.90 0.76 0.38 
56 text text3 segment2 01-May-14 -1.50 -1.97 -1.79 -3.51 

나는에 의해 그렇게 할 때 키로서 사용하여 데이터를 선택하는 루프를 만들기 위해 노력하고있어 한 열은 작동 :

for (j in 1:length(unique(InputData[,3]))) { 

    InputDataSubset <- InputData[InputData[,3] == unique(InputData[,3])[j],] 
print(unique(InputData[,3])[j]) 
print(InputDataSubset) 
} 

내가 몇 열을 기준으로 그렇게하려고하면 :

for (j in 1:length(unique(InputData[,1:3]))) { 

    InputDataSubset <- InputData[InputData[,1:3] == unique(InputData[,1:3])[j,],] 
    print(unique(InputData[,3])[j]) 
    print(InputDataSubset) 
} 

나는 오류 메시지를 받았습니다 :

Error in Ops.data.frame(InputData[, 1:3], unique(InputData[, 1:3])[j, : 
    ‘==’ only defined for equally-sized data frames 

어떻게 이러한 문제가 해결 될 수 있습니까? 미리 감사드립니다. 결과를 작업 아닐

위한

+1

'분할 (DF, DF [C ("필드 1", "2 필드")])'. – Frank

+1

'dplyr :: group_by'도 사용할 수 있습니다. – r2evans

+0

또는'by (DF, DF [, c ("field1", "field2")], FUN = function (df) df)' – Parfait

답변

0

감사는 다음과 같다 :

InputDataSubset<-by(InputData, InputData[, colnames(InputData)[1:3]], FUN=function(df) df) 


for (j in 1:length(InputDataSubset)) { 
    print(InputDataSubset[j]) 
} 
+0

'by'가 도움이되었지만 유용한 슬라이스/주사위 방법이며 제안 된 'split'은 동등합니다. 'by'에서'colnames (InputData) [1 : 3]'을'c (1 : 3)'로 대체하십시오. 'for' 루프는'lapply (InputDataSubset, print)'를 사용합니다. – Parfait