我想将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
任何帮助表示赞赏。提前谢谢!
答案 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