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

如何使用tidyverse/dplyr将同ID的去重值汇总为列表列

dplyr按ID分组汇总去重值实现方案

需求说明

给定如下测试数据集,需要按ID维度分组,提取每个ID对应的所有不重复value值,汇总成结果表:

ID   value  character
001      A        JABA
002      B        FABA
001      B        RABA
003      D        RIBI
003     TT        LENI
004      A        LENT
001      A        TATA
004      N        YAYA
004      N        YANA

预期输出格式:

ID   values
001  [A,B]
002  [B]
003  [D,TT]
004  [A,N]

完整实现代码

# 加载依赖包
library(dplyr)

# 构造示例源数据
df <- data.frame(
  ID = c("001","002","001","003","003","004","001","004","004"),
  value = c("A","B","B","D","TT","A","A","N","N"),
  character = c("JABA","FABA","RABA","RIBI","LENI","LENT","TATA","YAYA","YANA")
)

# 分组汇总计算
res <- df %>%
  group_by(ID) %>%
  summarise(
    values = paste0("[", paste(unique(value), collapse = ","), "]"),
    .groups = "drop"
  )

代码逻辑说明

  • 用group_by(ID)指定按ID字段分组,后续汇总操作会在每个ID分组内独立执行
  • unique(value)会自动过滤当前分组内value列的重复值,只保留唯一取值
  • 两层paste操作负责把去重后的值拼接成带方括号、逗号分隔的字符串格式,和示例输出完全匹配
  • 加.groups = "drop"参数是为了汇总完成后自动解除分组,避免后续操作受分组状态干扰

如果不需要固定的字符串输出格式,后续还要对汇总后的值做计算,更推荐存为列表列格式,处理更灵活:

res_list <- df %>%
  group_by(ID) %>%
  summarise(
    values = list(unique(value)),
    .groups = "drop"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:09:15