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

R语言按分组拼接列值时仅去重保留唯一值的实现方法

解决方案

原有写法的问题是直接对分组下的全量列值做拼接,没有提前去重,只要在拼接逻辑前增加unique()去重步骤即可实现需求。

可直接运行的代码

如果需要和给出的期望输出完全一致(拼接的逗号后无空格),使用paste加collapse = ","参数实现:

library(dplyr)

# 示例数据
Data <- data.frame(
  Region = c(1,1,2,2),
  branch = c("A","A","B","B"),
  ID1 = c(1,1,2,2),
  ID2 = c(1,2,2,2),
  ID3 = c(2,2,2,3),
  ID4 = c(4,3,2,4)
)

# 分组去重拼接代码
Data %>%
  group_by(Region, branch) %>% 
  summarise(
    across(everything(), ~paste(unique(.), collapse = ",")),
    .groups = "drop"
  )

运行结果

运行上述代码将得到完全匹配需求的输出:

# A tibble: 2 × 6
  Region branch ID1   ID2   ID3   ID4  
   <dbl> <chr>  <chr> <chr> <chr> <chr>
1      1 A      1     1,2   2     4,3
2      2 B      2     2     2,3   2,4

说明

  • 核心逻辑:对每个分组下的字段值,先用unique()提取非重复值,再做字符串拼接,从根源上避免重复值被拼接
  • 如果不介意拼接后的逗号后带空格,可以把paste(unique(.), collapse = ",")替换为toString(unique(.)),效果等价,仅格式有差异
  • 新增.groups = "drop"参数是为了聚合完成后自动移除分组属性,避免后续数据处理受残留分组影响,是dplyr分组操作的推荐写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:21:21