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

使用dplyr实现重复文本关联姓名的字符串列表汇总需求

问题:合并重复书籍对应的关联姓名列表

我有多个包含name和book列的数据框,需要找出book列中的重复项,并将每个重复项对应的所有关联姓名合并为单行列表。目前已通过dplyr统计出重复书籍的出现次数,但无法将姓名合并成单行。

可复现代码

# 创建两个数据框
books1 <- data.frame(
  name=rep("Ellie", 4),
  book= c("Anne of Green Gables", "The Secret Garden", "Alice in Wonderland", "A Little Princess"))

books2 <- data.frame(
  name=rep('Jess', 6),
  book=c("Harry Potter", "Percy Jackson", "Anne of Green Gables", "Chronicles of Narnia", "Redwall", "A Little Princess"))

# 合并为单个数据框
books <- bind_rows(books1, books2)

# 目前的代码:仅统计重复次数
repeatbooks <- books %>% group_by(book) %>% summarize(n=n())

当前输出

book                     n
1 A Little Princess        2
2 Alice in Wonderland      1
3 Anne of Green Gables     2
4 Chronicles of Narnia     1
5 Harry Potter             1
6 Percy Jackson            1
7 Redwall                  1
8 The Secret Garden        1

期望输出

book                     n     name
1 A Little Princess        2     Ellie, Jess
2 Alice in Wonderland      1     Ellie
3 Anne of Green Gables     2     Ellie, Jess

错误尝试说明

之前尝试的代码会生成多行结果,无法将姓名合并为单行:

repeatbooks <- books %>% group_by(book) %>% summarize(n=n(), names=c(paste0(name), ', '))

问题在于c(paste0(name), ', ')会将每个姓名拆分为独立元素,导致summarize输出多行,而非合并成一个字符串。

解决方案

在summarize中使用paste(unique(name), collapse = ", "),通过unique去除同一本书对应的重复姓名(比如同一个人多次标记同一本书的情况),再用collapse参数将姓名列表拼接为单个字符串:

library(dplyr)

# 合并数据并统计
repeatbooks <- books %>%
  group_by(book) %>%
  summarize(
    n = n(),
    name = paste(unique(name), collapse = ", ")
  )

# 可选:如果只需要保留重复出现(n≥2)的书籍,添加filter
repeatbooks <- repeatbooks %>% filter(n >= 2)

运行后即可得到期望的输出:

book                     n     name
1 A Little Princess        2     Ellie, Jess
2 Alice in Wonderland      1     Ellie
3 Anne of Green Gables     2     Ellie, Jess

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:36:07