如何用dplyr按类型求和后除以重复次数计算均值?
解决分组计算均值的问题
嘿,其实你需求里的“求和后除以该类型的总出现次数”,本质就是计算每组的平均值,用dplyr可以很轻松实现,不用绕弯路手动计算,直接用内置的均值函数就好,我给你两种实现方式:
方式一:直接用mean()函数(最简洁)
直接在summarise里对value列调用mean(),这是最直接的写法:
library(dplyr) # 先还原你的原始数据 d <- data.frame(type=c("rna","rna","rna"), value = c(1,2,3) ) d2 <- data.frame(type=c("dna","dna"), value = c(20,30) ) df <- rbind(d,d2) # 分组计算均值 result <- df %>% group_by(type) %>% summarise(value = mean(value)) %>% data.frame() print(result)
运行这段代码后,输出正好是你想要的结果:
type value 1 dna 25 2 rna 2
方式二:手动实现求和/行数(如果你想明确逻辑)
如果你想手动写出“求和除以次数”的逻辑,也可以用n()函数获取每组的行数,再和求和结果做除法:
result <- df %>% group_by(type) %>% summarise(value = sum(value)/n()) %>% data.frame()
这个结果和用mean()完全一致,因为mean()的底层逻辑就是这么计算的。
为啥你原来的代码只得到求和结果?
你之前用了summarise_all(sum),这个函数会对所有非分组列应用求和操作,所以自然只得到了每组的总和。把sum换成mean,或者像上面那样指定计算逻辑,就能得到你要的均值啦~
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

