我有一个不同样本和技术重复的数据框(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()。这怎么可能?
答案 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的平均值。