按组 R

问题描述

我正在尝试获得具有 3 个重复的样本的均值、标准差和 cv。数据如下所示:

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) 只给出“样本”和“滴度”2 列。 为什么?有什么解决办法吗?

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

解决方法

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

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

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

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