如何在R语言中从年度数据创建汇总各列年度总值的新DataFrame?
按年份分组计算DataFrame多列年度总值
问题描述
现有如下DataFrame:
| year | v1 | v2 | v3 |
|---|---|---|---|
| 2021 | 5 | 4 | 6 |
| 2021 | 10 | 5 | 3 |
| 2020 | 7 | 8 | 5 |
| 2020 | 3 | 3 | 4 |
| 2019 | 3 | 1 | 8 |
需要生成一个新的DataFrame,按year分组计算每列的年度总和,每行对应一个年份,期望结果如下:
| year | v1 | v2 | v3 |
|---|---|---|---|
| 2021 | 15 | 9 | 9 |
| 2020 | 10 | 11 | 9 |
| 2019 | 3 | 1 | 8 |
尝试了以下代码但只得到了v1列的汇总结果:
newdf <- df %>% group_by(year) %>% summarise(v1 = sum(v1))
解决方案
你的代码仅针对v1列做了求和,要批量处理多列,可使用dplyr的across()函数对指定列应用相同操作:
方法1:指定具体列范围
若明确要汇总的列是v1到v3,直接指定列范围即可:
library(dplyr) newdf <- df %>% group_by(year) %>% summarise(across(v1:v3, sum))
方法2:自动匹配数值列
若DataFrame中有多个数值列且都需要汇总,无需逐个列名指定,用where(is.numeric)筛选所有数值列(自动排除非数值的year列):
newdf <- df %>% group_by(year) %>% summarise(across(where(is.numeric), sum))
旧版dplyr兼容写法(可选)
如果使用的是dplyr 1.0.0之前的版本,可替换为summarise_all():
newdf <- df %>% group_by(year) %>% summarise_all(sum)
执行上述代码后,即可得到包含所有列年度总和的目标DataFrame。
内容的提问来源于stack exchange,提问作者hazel
相关产品推荐
相关产品推荐

