首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按R组汇总数据

按R组汇总数据
EN

Stack Overflow用户
提问于 2021-01-09 05:24:54
回答 1查看 49关注 0票数 0

我试图得到平均,sd,cv的样本,有3个副本。数据如下:

代码语言:javascript
运行
复制
Sample   Titer
1        1000
1        1002
1        1006
2        2003
2        2090
2        NA
3        3020
3        3020
3        3498

我要以excel格式输出。

代码语言:javascript
运行
复制
Sample  mean    sd    cv
1       
2
3

我写了这个:

代码语言:javascript
运行
复制
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(样本)%>%summarize(df,titer.mean=mean(效价),sd=sd(效价),cv=cv(效价))不起作用,给出NA值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-09 05:28:50

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

代码语言:javascript
运行
复制
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进行同样的操作,但它会将所有值保存在一列中的矩阵中。

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65639632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档