我有一个如下所示的数据框:
genotype DIV3 DIV4 ...
WT 12.4 15.2
WT 35.4 35.3
HET 1.3 1.2
HET 1.5 5.2
我希望能够计算每个组的每个列的中位数,但我不确定在R中执行此操作的最佳方法。我希望如果我没有打电话给基因型,因为其他数据集可能不会保持不变。
答案 0 :(得分:5)
我觉得很奇怪,还没有人建议aggregate
,因为它是为这些类型的任务包含的简单的基本R函数。 E.g:
aggregate(. ~ genotype, data=dat, FUN=median)
# genotype DIV3 DIV4
#1 HET 1.4 3.20
#2 WT 23.9 25.25
答案 1 :(得分:2)
试试这个:
apply(df[,-1], 2, function(x) tapply(x, df[,1], mean))
答案 2 :(得分:2)
我发现ddply是最好的。
medians = ddply(a, .(genotype), numcolwise(median))
答案 3 :(得分:2)
data.table版本也很好:
library(data.table)
ddt[,lapply(.SD, median),by=genotype]
genotype DIV3 DIV4
1: WT 23.9 25.25
2: HET 1.4 3.20
答案 4 :(得分:0)
总的来说,我认为使用dplyr
解决方案代替plyr
是一种很好的做法。它在速度和可读性方面应该是一个很大的改进。见this link。
例如:
require(dplyr)
df %>%
group_by(genotype) %>%
summarize(
DIV3_median = median(DIV3),
DIV4_median = median(DIV4)
)