【问题标题】:summarize data by group R按 R 组汇总数据
【发布时间】:2021-04-14 18:55:31
【问题描述】:

我试图获得具有 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)))

结果看起来不错,只是 sdcv 不被视为新列并且没有列名 str(Re) 仅给出“Sample”和“titer”2 列。 为什么?有什么解决办法吗?

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

【问题讨论】:

    标签: r dplyr statistics


    【解决方案1】:

    您需要从所有计算中排除 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)
    

    【讨论】:

    • aggregate 将一列Titler 中的所有值作为矩阵拟合。我在答案中添加了更新,以显示如何使用 aggregate 生成不同的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多