2016-06-11 52 views
-3

我想應用colMeans()到我的'數據'矩陣,但在子集。如何將colMeans應用於R中的特定行?

例如,下面是這種(數據):

 C1 C2 C3 C4 C5 Category 
Gene1 0.07 0.11 0.05 0.07 0.07 A 
Gene2 0.20 0.18 0.16 0.15 0.15 A 
Gene3 0.91 0.93 0.90 0.17 0.92 C 
Gene4 0.32 0.05 0.12 0.13 0.05 B 
Gene5 0.44 0.53 0.46 0.03 0.47 A 
Gene6 0.70 0.34 0.80 0.80 0.80 B 
Gene7 0.49 0.55 0.67 0.49 0.89 B 
Gene8 0.25 0.20 0.49 0.21 0.50 C 
Gene9 0.10 0.10 0.05 0.11 0.09 C 

我想申請的基因的每個類別colMeans(數據),因此對於子集 「A」, 「B」 和 「C」分別和colMeans結果如下:

C1 C2 C3 C4 C5 Category 
0.24 0.27 0.22 0.08 0.23 A 
0.50 0.31 0.53 0.47 0.58 B 
0.42 0.41 0.48 0.16 0.50 C 

任何幫助表示讚賞。提前致謝!

+1

您可以使用'by'或'aggregate'。讓你的例子可重複使用,我們可以談談。你可以使用'dput'來共享數據。 –

+0

使用'庫(dplyr); df1%>%group_by(Category)%>%summarise_each(funs(mean))' – akrun

回答

1

另一種替代方案:

sapply(dat[, 1:5], function(x) tapply(x, dat[, 6], mean)) 

     C1  C2  C3   C4  C5 
A 0.2366667 0.2733333 0.2233333 0.08333333 0.2300000 
B 0.5033333 0.3133333 0.5300000 0.47333333 0.5800000 
C 0.4200000 0.4100000 0.4800000 0.16333333 0.5033333 
+0

感謝您的回答。這適用於我! – Letin

2

如果是AA data.frame一種選擇是從dplyr

library(dplyr) 
df1 %>% 
    group_by(Category) %>% 
    summarise_each(funs(round(mean(.),2))) 

summarise_each但是,如果數據集是matrix,然後轉換爲data.framestringsAsFactors=FALSE,得到mean

之前做類型轉換爲數字
as.data.frame(mat1, stringsAsFactors=FALSE) %>% 
       group_by(Category) %>% 
       summarise_each(funs(round(mean(as.numeric(.)), 2))) 
+1

感謝您的回答。 – Letin

+0

@PoojaMandaviya謝謝,看起來你是基地R的粉絲。沒有問題。 – akrun

+0

是的,那只是一條線而我嘗試的第一條線。但當然這兩種方法的工作原理:) – Letin

相關問題