无法使用表格的汇总计算平均值,结果为N / A

时间:2019-04-12 17:12:37

标签: r

当前使用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

我在做什么错? 谢谢!

3 个答案:

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