R语言:基于唯一ID对DataFrame多列求和的dplyr实现问题
解决dplyr分组求和的问题
嘿,我来帮你排查下问题~你的代码没成功,主要是因为用了dplyr旧版本的语法,现在新版的dplyr已经弃用了summarise_all()和funs()这两个写法啦,所以运行时要么报错,要么达不到预期效果。
下面给你两种可行的解决方案,优先推荐新版语法:
新版dplyr(1.0.0+)推荐写法
用across()配合summarise(),这是现在dplyr官方推荐的方式,更灵活也更清晰:
方式1:指定要求和的列
如果明确知道要对Val1、Val2、Val3求和,可以直接列出来:
library(dplyr) df %>% group_by(ID) %>% summarise(across(c(Val1, Val2, Val3), sum))
方式2:对所有非分组列求和
如果你的数据里除了ID列,其他列都需要求和,可以用everything()简化:
df %>% group_by(ID) %>% summarise(across(everything(), sum))
旧版dplyr兼容写法
如果你的dplyr版本比较旧(低于1.0.0),可以调整成下面的写法,去掉funs()的括号:
df %>% group_by(ID) %>% summarise_all(sum)
验证结果
用你提供的示例数据测试:
先构造数据框:
df <- data.frame( ID = c("A", "A", "A", "B"), Val1 = c(1,1,1,0), Val2 = c(1,1,1,0), Val3 = c(1,1,1,1) )
运行上面的代码后,就能得到你想要的结果:
# A tibble: 2 × 4 ID Val1 Val2 Val3 <chr> <dbl> <dbl> <dbl> 1 A 3 3 3 2 B 0 0 1
另外建议你尽量升级到最新版的dplyr,新版的across()支持更多高级操作,比如同时应用多个函数、用列选择器筛选列等,实用性更强~
内容的提问来源于stack exchange,提问作者elia
相关产品推荐
相关产品推荐

