2015-10-16 91 views
1

多個變量我有45389行薩姆通過

   gene_id  KOIN1 KOIN2  KOIN3  KOIP1 KOIP2  KOIP3 
1 ENSMUSG00000000001 6.0056300 4.677550 6.3490400 9.9992300 9.931780 12.56900000 
2 ENSMUSG00000000003 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.00000000 
3 ENSMUSG00000000028 0.9988830 0.407537 1.5629300 0.1845460 1.899790 0.85186600 
4 ENSMUSG00000000031 0.0000000 0.818696 0.3708190 0.0419544 0.000000 0.02832700 
5 ENSMUSG00000000037 0.0160579 0.172857 0.0988266 0.0000000 1.174690 0.00726742 
6 ENSMUSG00000000049 0.3923090 0.000000 0.0000000 0.0000000 0.124112 0.01811530 

等這樣的R數據幀...

有在gene_id柱一些重複。例如,

5090 ENSMUSG00000025515 0.00000000 0.00000000 0.1572500 0.000000000 0.000000 0.0000000 
5091 ENSMUSG00000025515 0.00000000 0.00000000 0.1572500 0.000000000 0.000000 0.0000000 
5095 ENSMUSG00000025515 0.00000000 0.00000000 0.0386388 0.000000000 0.000000 0.0000000 
5096 ENSMUSG00000025515 0.00000000 0.00000000 0.0386388 0.000000000 0.000000 0.0000000 
5100 ENSMUSG00000025515 0.00000000 0.00000000 0.0000000 0.000000000 0.000000 0.0000000 
5101 ENSMUSG00000025515 0.00000000 0.00000000 0.0000000 0.000000000 0.000000 0.0000000 
5105 ENSMUSG00000025515 0.33817000 0.06733700 0.4894620 0.000000000 0.000000 0.0000000 
5106 ENSMUSG00000025515 0.33817000 0.06733700 0.4894620 0.000000000 0.000000 0.0000000 
5110 ENSMUSG00000025515 0.00863568 0.00000000 0.0337577 0.000000000 0.000000 0.0000000 
5111 ENSMUSG00000025515 0.00863568 0.00000000 0.0337577 0.000000000 0.000000 0.0000000 

我基本上想要做的是與每一列是所有值的總和值摺疊所有重複分解成一排。

我想ddply從plyr包會工作,但它仍然給了我所有的重複

newdataframe <- ddply(dataframe,"gene_id",numcolwise(sum)) 

這是我跑了。

有什麼建議嗎?

+0

也許你需要'總結「不知何故?非數字值不會崩潰......猜測(不測試),'ddply(dataframe,「gene_id」,summarize,numcolwise(sum))'? –

+0

或'library(data.table); setDT(df)[,lapply(.SD,sum),by = gene_id]' –

回答

3

普通老式aggregate會做:

newdataframe <- aggregate(. ~ gene_id, dataframe, sum) 

的公式爲一切由gene_idsum其他彙總計算所有值的總和。例如,您也可以使用mean

如果你只是想要一些列的,你可以cbind他們:

newdataframe <- aggregate(cbind(col1, col2) ~ gene_id, dataframe, sum) 
5

另一種選擇:

library(dplyr) 
df %>% 
    group_by(gene_id) %>% 
    summarise_each(funs(sum)) 

其中給出:

#Source: local data frame [7 x 7] 
# 
#    gene_id  KOIN1 KOIN2  KOIN3  KOIP1 KOIP2  KOIP3 
#    (fctr)  (dbl) (dbl)  (dbl)  (dbl) (dbl)  (dbl) 
#1 ENSMUSG00000000001 6.0056300 4.677550 6.3490400 9.9992300 9.931780 12.56900000 
#2 ENSMUSG00000000003 0.0000000 0.000000 0.0000000 0.0000000 0.000000 0.00000000 
#3 ENSMUSG00000000028 0.9988830 0.407537 1.5629300 0.1845460 1.899790 0.85186600 
#4 ENSMUSG00000000031 0.0000000 0.818696 0.3708190 0.0419544 0.000000 0.02832700 
#5 ENSMUSG00000000037 0.0160579 0.172857 0.0988266 0.0000000 1.174690 0.00726742 
#6 ENSMUSG00000000049 0.3923090 0.000000 0.0000000 0.0000000 0.124112 0.01811530 
#7 ENSMUSG00000025515 0.6936114 0.134674 1.4382170 0.0000000 0.000000 0.00000000