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

如何在R中合并相似国家销售额并存储为独立dataframe?

在R中合并同类国家并求和销售额的解决方案

完整实现代码(dplyr + stringr)

# 加载所需包
library(dplyr)
library(stringr)

# 构造你的示例数据框
df <- data.frame(
  Country = c("Spain 1", "Spain 2", "France", "Nigeria 1", "Nigeria 2"),
  Sales = c(1000, 200, 300, 500, 700),
  stringsAsFactors = FALSE
)

# 处理国家名称并分组求和
sum_df <- df %>%
  # 移除国家名称末尾的空格和数字
  mutate(Country = str_remove(Country, "\\s+\\d+$")) %>%
  # 按处理后的国家名称分组
  group_by(Country) %>%
  # 计算每组销售额总和
  summarise(Sum_of_sales = sum(Sales, na.rm = TRUE)) %>%
  # 取消分组,转为普通数据框
  ungroup()

# 查看结果
sum_df

运行后会得到你预期的输出:

# A tibble: 3 × 2
  Country Sum_of_sales
  <chr>          <dbl>
1 France           300
2 Nigeria         1200
3 Spain           1200

关键步骤解释

  1. 清洗国家名称:使用str_remove配合正则表达式\\s+\\d+$,精准移除国家名称末尾的空格和数字,确保"Spain 1""Spain 2"统一为"Spain",无后缀的国家名称保持不变。
  2. 分组求和:通过group_by按清洗后的国家名称分组,再用summarise计算每组的销售额总和,na.rm = TRUE用于处理可能存在的缺失值,避免求和报错。
  3. 取消分组:ungroup()将分组后的 tibble 转为普通数据框,方便后续操作。

Base R 替代方案(无需额外包)

如果不想加载dplyr和stringr,可以用Base R实现:

# 构造数据框
df <- data.frame(
  Country = c("Spain 1", "Spain 2", "France", "Nigeria 1", "Nigeria 2"),
  Sales = c(1000, 200, 300, 500, 700),
  stringsAsFactors = FALSE
)

# 清洗国家名称
df$Country <- sub("\\s+\\d+$", "", df$Country)

# 分组求和并修改列名
sum_df_base <- aggregate(Sales ~ Country, data = df, sum, na.rm = TRUE)
colnames(sum_df_base)[2] <- "Sum_of_sales"

# 查看结果
sum_df_base

内容的提问来源于stack exchange,提问作者Surely

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:30:57