2016-12-08 5 views
0

중복 된 ID가 포함 된 각 행의 값을 병합하고 합계합니다.중복 ID로 행 병합

예를 들어 아래 데이터 프레임에는 'LOC102723897'이라는 중복 된 기호가 들어 있습니다. 이 두 행을 병합하고 각 열 내에서 값의 합계를하여 중복 된 기호에 대해 한 행이 나타나게하고 싶습니다.

> head(y$genes) 
    SM01 SM02 SM03 SM04 SM05 SM06 SM07 SM08 SM09 SM10 SM11 SM12 SM13 SM14 SM15 SM16 SM17 SM18 SM19 SM20 SM21 SM22 
1 32 29 23 20 27 105 80 64 83 80 94 58 122 76 78 70 34 32 45 42 138 30 
2 246 568 437 343 304 291 542 457 608 433 218 329 483 376 410 296 550 533 537 473 296 382 
3 30 23 30 13 20 18 23 13 31 11 15 27 36 21 23 25 26 27 37 27 31 16 
4 1450 2716 2670 2919 2444 1668 2923 2318 3867 2084 1121 2175 3022 2308 2541 1613 2196 1851 2843 2078 2180 1902 
5 288 366 327 334 314 267 550 410 642 475 219 414 679 420 425 308 359 406 550 398 399 268 
6 34 59 62 68 42 31 49 45 62 51 40 32 30 39 41 75 54 59 83 99 37 37 
    SM23 SM24 SM25 SM26 SM27 SM28 SM29 SM30  Symbol 
1 41 23 57 160 84 67 87 113 LOC102723897 
2 423 535 624 304 568 495 584 603 LINC01128 
3 31 21 49 13 33 31 14 31 LINC00115 
4 2453 3041 3590 2343 3450 3725 3336 3850  NOC2L 
5 403 347 468 478 502 563 611 577 LOC102723897 
6 45 51 56 107 79 105 92 131  PLEKHN1 
> dim(y) 
[1] 12928 30 

은 내가 '기호'열을 기준으로 행을 병합 plyr를 사용하여 시도했지만 제대로 동작하지 않습니다.

> ddply(y$genes,"Symbol",numcolwise(sum)) 
> dim(y) 
[1] 12928 30 
> length(y$genes$Symbol) 
[1] 12928 
> length(unique(y$genes$Symbol)) 
[1] 12896 

답변

2

당신의 그룹에 의해 Symbolsum all 열에. 사용

library(dplyr) 
df %>% group_by(Symbol) %>% summarise_all(sum) 

data.table

library(data.table) 
setDT(df)[ , lapply(.SD, sum),by="Symbol"] 
+0

에서 aggregate를 사용할 수있는 두 가지 작업 - 감사합니다! – emblake

1

우리는 단지 base R

aggregate(.~ Symbol, df, FUN = sum)