计算每列分组数据的中位数

时间:2014-10-23 01:33:28

标签: r stat

我有一个如下所示的数据框:

 genotype     DIV3     DIV4 ...
 WT           12.4     15.2
 WT           35.4     35.3
 HET          1.3      1.2
 HET          1.5      5.2

我希望能够计算每个组的每个列的中位数,但我不确定在R中执行此操作的最佳方法。我希望如果我没有打电话给基因型,因为其他数据集可能不会保持不变。

5 个答案:

答案 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)
  )