我试图得到平均,sd,cv的样本,有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(样本)%>%summarize(df,titer.mean=mean(效价),sd=sd(效价),cv=cv(效价))不起作用,给出NA值。
发布于 2021-01-09 05:28:50
您需要从所有计算中排除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)
https://stackoverflow.com/questions/65639632
复制相似问题