从数据框中分组和平均重复

时间:2014-07-04 19:35:58

标签: r dplyr

我有一个不同样本和技术重复的数据框(AA.1,AA.2,AA.3)。每个完整的样品组(所有样品技术重复)都有一个测量值var3,并且对于不同的var2(X,Y或Z)重复测量。总而言之,我有(样本数)(技术重复次数)(var2次数)测量值(var1 x var2的所有可能组合重复3次)。

data.frame(
  var1=rep(rep(c('AA.1', 'AA.2', 'AA.3', 'BB.1', 'BB.2', 'BB.3'), each=3), 2),
  var2=rep(c('X', 'Y'), each=18),
  var3=sample(20:40, 36, replace=TRUE)
)

对于每个var2,我想平均每个样本的技术复制。我想通过创建一个新的数据框来实现这一点,该数据框列出样本名称作为行名称,3列是3个技术重复。然后我可以做rowMeans()和sd()。这怎么可能?

2 个答案:

答案 0 :(得分:3)

在基础R(调用数据框df)中:

aggregate(var3~var1+var2,df,mean)
#    var1 var2     var3
# 1  AA.1    X 31.66667
# 2  AA.2    X 25.00000
# 3  AA.3    X 30.66667
# 4  BB.1    X 27.33333
# 5  BB.2    X 32.00000
# 6  BB.3    X 29.66667
# 7  AA.1    Y 32.33333
# 8  AA.2    Y 24.66667
# 9  AA.3    Y 26.66667
# 10 BB.1    Y 38.00000
# 11 BB.2    Y 30.33333
# 12 BB.3    Y 25.66667

答案 1 :(得分:2)

有几种方法可以做到这一点。我认为使用 dplyr 可能是最直接的,但您也可以使用 tapply 命令。我有点难以从您的问题中找出您想要分组的变量,但希望运行以下代码有助于明确事项 -

假设您要查找var3的平均值,按var1和var2分组,请输入以下内容:

library(dplyr)

dat %>% group_by(var2,var1) %>% 
summarize(var3.mean = mean(var3))
像我说的那样,我有点难以判断这是否是你想要的分组结构。上面的代码将为var1和var2的每个唯一组合提供var3的平均值。