如何将colMeans仅应用于R中的特定行?

时间:2016-06-11 14:10:43

标签: r mean

我想将colMeans()应用于我的数据'矩阵,但在子集中。

例如,这是(数据):

      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

任何帮助表示赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果是来自data.frame

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

但是,如果数据集为matrix,然后使用data.frame转换为stringsAsFactors=FALSE,请在获取mean之前将类型转换为数字

as.data.frame(mat1, stringsAsFactors=FALSE) %>%
              group_by(Category) %>%
              summarise_each(funs(round(mean(as.numeric(.)), 2)))

答案 1 :(得分: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