问题描述
我正在尝试获得具有 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)))
结果看起来不错,只是 sd
和 cv
不被视为新列并且没有列名
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)