在R中按CountryCode和Year合并Deliveries列值的方法求助
可行的分组求和解决方案
当然可以按Year和CountryCode合并Deliveries列的值,你之前的问题出在工具用法错误:unique()仅用于移除完全重复的行,无法实现分组求和。以下是三种经过验证的实现方式:
方案1:使用dplyr包(语法直观易读)
这是R中数据处理的常用工具包,适合大多数场景:
# 首次使用需安装包 install.packages("dplyr") library(dplyr) # 读取数据 ArmsSales <- read_excel("USArmsSales.xlsx") # 分组求和:按CountryCode/Year/Country分组,对Deliveries求和 ArmsSales_clean <- ArmsSales %>% group_by(CountryCode, Year, Country) %>% summarise(Deliveries_total = sum(Deliveries, na.rm = TRUE), .groups = "drop")
na.rm = TRUE:自动忽略缺失值,避免求和出错.groups = "drop":取消分组状态,返回常规数据框
方案2:使用base R的aggregate函数(无需额外安装包)
如果你偏好原生R语法,修正后的aggregate用法如下:
ArmsSales <- read_excel("USArmsSales.xlsx") # 按指定列分组,对Deliveries执行求和 ArmsSales_clean <- aggregate(Deliveries ~ CountryCode + Year + Country, data = ArmsSales, FUN = sum, na.rm = TRUE) # 可选:重命名求和结果列 colnames(ArmsSales_clean)[4] <- "Deliveries_total"
方案3:使用data.table包(适合大数据集)
如果你的数据量较大,data.table的运行速度会显著优于前两种方案:
# 首次使用需安装包 install.packages("data.table") library(data.table) # 读取并转换为data.table格式 ArmsSales <- as.data.table(read_excel("USArmsSales.xlsx")) # 分组求和 ArmsSales_clean <- ArmsSales[, .(Deliveries_total = sum(Deliveries, na.rm = TRUE)), by = .(CountryCode, Year, Country)]
额外注意事项
- 请确认
Country与CountryCode是一一对应的,若存在同一CountryCode对应多个Country的情况,需先清理数据(比如统一国家名称) - 若无需保留
Country列,分组时仅保留CountryCode和Year即可
内容的提问来源于stack exchange,提问作者Kenzie DeKeyser
相关产品推荐
相关产品推荐

