You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:01:20