如何在R中按分组对多列分别求和而非合并为单列?
解决R语言分组对多列分别求和的问题
正确实现代码
针对你提供的数据集,按Sample、Motility分组并对每个t列单独求和的正确代码如下:
library(dplyr) dat %>% group_by(Sample, Motility) %>% summarise(across(t1:t3, sum), .groups = "drop")
问题原因说明
你之前的代码错误在于将sum()嵌套在across()外部,这会把across()返回的所有t列求和结果再累加为一个单一值,最终只生成一列数据。正确的逻辑是把sum作为函数传递给across(),让across()对每一列单独执行求和操作,这样就能保留原t列的列名和各自的求和结果。
适配100个t列的优化写法
实际场景中有100个t列时,用starts_with("t")匹配所有以t开头的列会更高效,无需手动写出t1:t100:
dat %>% group_by(Sample, Motility) %>% summarise(across(starts_with("t"), sum), .groups = "drop")
扩展:多特征分组
如果需要同时按更多特征(比如Diet、Life.Position)分组,只需在group_by()中添加对应变量:
dat %>% group_by(Sample, Motility, Diet, Life.Position) %>% summarise(across(starts_with("t"), sum), .groups = "drop")
内容的提问来源于stack exchange,提问作者ricoratso
相关产品推荐
相关产品推荐

