当前使用R来计算给定表中性别和基因型每种组合的均值和标准差:
id Sex Genotype Activity
1 male ff 1.884
2 male ff 2.283
3 male fs 2.396
4 female ff 2.838
5 male fs 2.956
6 female ff 4.216
7 female ss 3.620
我使用函数创建了一个名为tableed的表
tabled <- table(data$Sex, data$Genotype)
当我尝试计算均值时,我尝试以下函数:
aggregate(data$Sex ~ data$Genotype, by=list(data$Genotype), FUN=mean)
我得到的输出是
Group.1 data$Sex
<fctr> <dbl>
ff NA
fs NA
ss NA
3 rows
我在做什么错? 谢谢!
答案 0 :(得分:1)
我们可以使用公式方法。在这里,我们通过删除第一列(data[-1]
)来对感兴趣的列进行子集设置,指定要在~
('Activity ) and complete the formula with
。'(表示其他所有列)
aggregate(Activity ~., data[-1], FUN=mean)
# Sex Genotype Activity
#1 female ff 3.5270
#2 male ff 2.0835
#3 male fs 2.6760
#4 female ss 3.6200
在OP的代码中,它将公式方法与data.frame
方法混合在一起。
答案 1 :(得分:1)
您正在使用公式符号以及by
参数。我认为这是多余的。
您也没有告诉汇总要取平均值的原因,这就是错误的原因(平均值仅适用于数值)。
对于公式样式,请使用akrun的答案。这是带有“ by”参数的解决方案。
with(data, aggregate(list("Activity"=Activity), by=list("Genotype"=Genotype, "Sex"=Sex), FUN=mean))
答案 2 :(得分:0)
您可以使用TrackList
程序包-
data.table
OR
> library(data.table)
> setDT(dt)[,mean:=mean(Activity),by=.(Sex,Genotype)]
> dt
id Sex Genotype Activity mean
1: 1 male ff 1.884 2.0835
2: 2 male ff 2.283 2.0835
3: 3 male fs 2.396 2.6760
4: 4 female ff 2.838 3.5270
5: 5 male fs 2.956 2.6760
6: 6 female ff 4.216 3.5270
7: 7 female ss 3.620 3.6200