如何使用Dplyr按分组条件汇总两个国家间的exchange交易总额
错误原因
你分组时错误将exchange加入了分组变量,group_by(ID_1, ID_2, exchange)会把每个独立的exchange值拆分为单独分组,后续求和仅会对单个值计算,自然无法得到按国家对汇总的结果。
实现方案
方案1:保留单向配对(ID_1、ID_2顺序不同视为不同配对)
仅按ID_1和ID_2两个字段分组后求和即可:
library(dplyr) result <- df %>% group_by(ID_1, ID_2) %>% summarise(sum_of_exchange = sum(exchange), .groups = "drop")
运行后输出结果如下:
| ID_1 | ID_2 | sum_of_exchange |
|---|---|---|
| a | a | 1 |
| a | b | 13 |
| a | c | 34 |
| a | d | 3 |
| a | e | 5 |
| b | a | 8 |
| b | b | 6 |
| b | c | 82 |
| b | d | 9 |
方案2:合并双向配对((a,b)和(b,a)视为同一国家对,符合常规双边交易汇总需求)
先对每行的两个国家ID做排序,再按排序后的两个ID分组求和:
result <- df %>% mutate(country_min = pmin(ID_1, ID_2), country_max = pmax(ID_1, ID_2)) %>% group_by(country_min, country_max) %>% summarise(sum_of_exchange = sum(exchange), .groups = "drop")
运行后输出结果如下:
| country_min | country_max | sum_of_exchange |
|---|---|---|
| a | a | 1 |
| a | b | 21 |
| a | c | 34 |
| a | d | 3 |
| a | e | 5 |
| b | b | 6 |
| b | c | 82 |
| b | d | 9 |
内容的提问来源于stack exchange,提问作者dreamR
相关产品推荐
相关产品推荐

