首页 > 解决方案 > 按 R 组汇总数据

问题描述

我试图获得具有 3 个重复的样本的均值、标准差、简历。数据如下所示:

Sample   Titer
1        1000
1        1002
1        1006
2        2003
2        2090
2        NA
3        3020
3        3020
3        3498

我想以excel格式输出

Sample  mean    sd    cv
1       
2
3

我写了这个:

cv <- function(x) 100*( sd(x)/mean(x))
Re <- aggregate(titer ~ Sample, df, function(x) c(mean = mean(x), sd = sd(x), cv=cv(x)))

结果看起来很好,除了不被视为新列sd并且cv没有列名 str(Re) 仅给出“Sample”和“titer”2 列。为什么?有什么解决办法吗?

然后我尝试使用 group_by(Sample)%>%summarize(df, titer.mean=mean(titer), sd=sd(titer), cv=cv(titer)) 不起作用,给出了 NA 值。

标签: rdplyrstatistics

解决方案


您需要NA从所有计算中排除值。

library(dplyr)
cv <- function(x) 100*( sd(x, na.rm = TRUE)/mean(x, na.rm = TRUE))

df %>% 
  group_by(Sample)%>%
  summarize(titer.mean=mean(Titer, na.rm = TRUE), 
           sd=sd(Titer, na.rm = TRUE), 
           cv=cv(Titer))

您可以执行相同的操作,aggregate但它会将矩阵中的所有值保存在一列中。

tmp <- aggregate(Titer ~ Sample, df, function(x) c(mean = mean(x, na.rm = TRUE), 
                                            sd = sd(x, na.rm = TRUE), cv=cv(x)))

result <- cbind(tmp[1], tmp$Titer)

推荐阅读