2014-01-25 9 views
1

그룹화 조건에 포함되지 않은 속성을 포함하도록 데이터를 그룹화하려고합니다. 예 데이터그룹화되지 않은 속성을 포함하여 R의 데이터 그룹화 조건

 pixel740 label num 
1   0  0 4132 
2   0  1 4684 
3   0  2 4177 
4   1  7 4 
5   1  9 1 
6   2  7 11 
7   2  9 6 
8   3  7 10 
9   3  9 4 
내가 pixel740에 따라 최대 납입이 해당 행을 포함 할 즉
 pixel740  label num 
     0   1  4684 // this is as4684 is max num , so i include the row 
     1   7  4 
     2   7  11 
     3   7  10 

내가 ddply 시도 속성 원하는

결과 데이터 분할 옵션이 있지만, 우리가 그룹화하는 데 사용하는 속성, 즉 픽셀 740을 포함하고 전체 행을 포함하지 않음

어떻게 수행하나요? 이 작업을 수행 할 수있는 기능이 있는가 또는 나는 피하려고 루프를 사용

다음
+1

왜 여기에 sql 태그가 있습니까? – hd1

답변

2

(원래 데이터 x 호출) aggregatepixel740의 각 값에 대해 최대 num 값을 얻는 방법은 다음과 같습니다

aggregate(num ~ pixel740, data=x, FUN=max) 
## pixel740 num 
## 1  0 4684 
## 2  1 4 
## 3  2 11 
## 4  3 10 
을 여기 01,232,455,553의 값으로 데이터를 정렬하는 방법은, 주석의 요청으로

ag <- aggregate(num ~ pixel740, data=x, FUN=max) 
res <- merge(ag, x) 
res 
## pixel740 num label 
## 1  0 4684  1 
## 2  1 4  7 
## 3  2 11  7 
## 4  3 10  7 

:

은 행을 얻으려면, 당신은 원래 세트 merge 수 있습니다:

res[order(res$pixel740),] 

이 간단한 예에서 출력에는 차이가 없습니다.

+0

이것은 내가 원하는 것이 아닙니다. 최대 행 번호에 해당하는 전체 행을 원합니다 .i 원하는 출력을 표시하고 솔루션이 일치하지 않습니다 – user2143940

+0

아니요. 나는 pixel740에 레이블 wrt의 최대 싶지 않아하지만 그룹화 조건으로 픽셀 740 최대 num에 해당하는 전체 행을 싶습니다 – user2143940

+0

그래, 그게 전부 야. 감사합니다 – user2143940

1

저는 data.table을 사용하여 해결책을 찾기 위해 노력해 왔습니다. 이것은 결과라고 생각합니다. 나는 그것이 향상 될 수 있다고 상상한다.

require("data.table") 
DT <- data.table(read.table("clipboard", header=T)) 

DT2 <- DT[, list(max_num = max(num)), by="pixel740"] 

setkey(DT,num,pixel740) 
setkey(DT2,max_num,pixel740) 

RES <- DT[DT2,j=list(label)] 
setkey(RES,pixel740) 

RES 

    num pixel740 label 
1: 4684  0  1 
2: 4  1  7 
3: 11  2  7 
4: 10  3  7 
+0

여분의 행이 언제 나옵니까? –

+0

답변을 수정했습니다. – marbel

+0

지금 보았습니다. 키들에 대해 단지'num'과'max_num'을 갖는 것은 병합에서'num == 4'와 함께 잘못된 행을 매치했습니다. 베이스'merge'는 기본적으로 모든 공통 컬럼 이름에 병합하기 때문에 이렇게하지 않습니다. –

관련 문제