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

在R中基于Title和Date列新增追踪重复匹配的列

解决方案

问题根源

你用aggregate搭配paste的代码没达到预期,是因为没有对Country做去重处理——它会把同一Title+Date分组下所有重复的国家名称都拼接进去,而你需要的是唯一值的汇总。

改进方案

1. Base R 版本

先分组提取唯一的国家名称再拼接,最后合并回原数据(保留所有200多列):

# 按Title+Date分组,提取唯一Country并拼接
x <- aggregate(Country ~ Title + Date, df, function(countries) {
  paste(unique(countries), collapse = ", ")
})
names(x)[3] <- "Total_Countries"
# 合并回原数据集,保留所有原有列
df <- merge(df, x, by = c("Title", "Date"), all.x = TRUE)

2. dplyr 版本(更简洁)

如果习惯tidyverse语法,用分组后直接新增列的方式,操作更直观:

library(dplyr)

df <- df %>%
  group_by(Title, Date) %>%
  mutate(Total_Countries = paste(unique(Country), collapse = ", ")) %>%
  ungroup()

3. data.table 版本(大数据集更高效)

你的数据集有200多列,要是行数也很多,用data.table的速度会快很多:

library(data.table)

setDT(df)
# 按Title+Date分组,新增Total_Countries列
df[, Total_Countries := paste(unique(Country), collapse = ", "), by = .(Title, Date)]

额外优化(可选)

如果需要让Total_Countries里的国家名称按字母排序,把unique(x)改成sort(unique(x))即可,比如:

# 以dplyr为例
df <- df %>%
  group_by(Title, Date) %>%
  mutate(Total_Countries = paste(sort(unique(Country)), collapse = ", ")) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:07:50