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

在R语言中按分组将字符串合并为单个字符串的实现

按UID合并Name字符串的R语言实现

输入数据

library(dplyr)  

Input <- tibble(
      UID = c("Code001", "Code001","Code002","Code002","Code002","Code002","Code003","Code003","Code003","Code004","Code005","Code005"),
      Name = c("NameABC", "Name JHB", "NameYDB", "Name & KBC","Name-S-D-T", "Name DF-R","NameMEY", "Name PeU","Name Eed", "NameBOR", "Name-Ptg","NameLKD")) 

需求说明

针对每个唯一的UID,将对应的Name值合并为单个字符串,规则如下:

  • 仅1个Name值:直接保留该值
  • 2个Name值:用&分隔
  • 超过2个Name值:前序值用逗号分隔,最后两个值用&分隔

期望输出

Output <- tibble(
      UID = c("Code001", "Code002","Code003","Code004","Code005"),
      Name = c("NameABC & Name JHB", "NameYDB, Name & KBC, Name-S-D-T & Name DF-R", "NameMEY, Name PeU & Name Eed", "NameBOR", "Name-Ptg & NameLKD")) 

解决方案代码

使用dplyr分组处理即可实现需求:

library(dplyr)

Input %>%
  group_by(UID) %>%
  summarise(Name = {
    n <- n()
    case_when(
      n == 1 ~ first(Name),
      n == 2 ~ paste(Name, collapse = " & "),
      n > 2 ~ paste(c(paste(Name[1:(n-2)], collapse = ", "), paste(Name[(n-1):n], collapse = " & ")), collapse = ", ")
    )
  }, .groups = "drop")

代码逻辑说明

  1. group_by(UID):按UID对数据分组
  2. 分组内处理逻辑:
    • 用n()获取当前组的Name数量
    • 通过case_when分支判断:
      • 数量为1时,直接取组内唯一的Name值
      • 数量为2时,用paste加&合并两个值
      • 数量大于2时,先合并前n-2个值为逗号分隔的字符串,再合并最后两个值为&分隔的字符串,最后将这两部分用逗号连接
  3. .groups = "drop":取消分组,返回标准的tibble结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:54:14