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

为DataFrame添加合并重复ID对应国家的新列

解决同ID对应国家合并的问题

我明白你想要把DataFrame中相同ID对应的所有Country合并成一个条目对吧?你之前用的ifelse方法逻辑不太对,因为它没有针对ID进行分组聚合,咱们换个更直接的方式来实现。

首先先把你的示例数据明确下来:

df <- data.frame(
  ID = c(55,55,55,98,98,98,65,67,84,22,22),
  Country = c("Poland", "Romania", "France", "Spain", "Portugal", "UK", "Germany", "Luxembourg", "Greece", "Estonia", "Lithuania")
)

方法一:用dplyr包(推荐,代码更直观)

dplyr的分组聚合非常适合这种场景,步骤很清晰:

  1. 按ID分组
  2. 把每个组里的Country用逗号(或你想要的分隔符)连接起来

代码如下:

library(dplyr)

result_df <- df %>%
  group_by(ID) %>%
  summarize(Countries = paste(Country, collapse = ", ")) %>%
  ungroup()

运行后你会得到目标输出:

ID Countries                     
  <dbl> <chr>                         
1    22 Estonia, Lithuania            
2    55 Poland, Romania, France       
3    65 Germany                       
4    67 Luxembourg                    
5    84 Greece                        
6    98 Spain, Portugal, UK           

方法二:用Base R的aggregate函数

如果你不想加载额外的包,用base R的aggregate也能实现:

result_df_base <- aggregate(Country ~ ID, data = df, FUN = function(x) paste(x, collapse = ", "))
colnames(result_df_base)[2] <- "Countries" # 把列名改成你想要的

这个结果和上面的dplyr方法完全一致。

为什么你之前的代码没生效?

你写的ifelse(df[duplicated(df$ID) | duplicated(df$ID, fromLast = TRUE),], paste('Countries', df$Country), NA)逻辑有问题:它只是判断哪些行是重复ID的行,但没有对这些行进行分组合并,反而会生成很多零散的结果,自然达不到你想要的聚合效果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:27:37