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

R语言实现数据框连续同名title分组 拼接对应text列值

问题根因

你原有代码无法得到预期结果,核心问题有两点:

  • 开头的filter(title %in% sample(unique(title)))逻辑是对title做随机抽样筛选,会随机丢失数据,和保留全量数据、保留原始顺序的需求完全无关
  • 直接使用group_by(title)是对全局所有同名title做聚合,会把不连续出现的同名title(比如示例中D前后的两段C)错误合并,不符合「非连续同名不跨组合并」的要求
实现方案

要实现连续相同值分组,核心是先构造连续分组标识:当当前行title和上一行title不一致时,分组序号累加1,用这个标识区分开不连续的同名分组,再做聚合即可。

dplyr原生实现

不需要额外依赖其他包,直接用dplyr内置函数即可实现:

library(dplyr)

result <- df %>%
  # 生成连续分组ID:当前title和上一行不同时组号+1
  mutate(group_id = cumsum(title != lag(title, default = first(title)))) %>%
  # 按连续分组ID和title分组,保证同组都是连续出现的相同title
  group_by(group_id, title) %>%
  summarise(
    # 如果需要统计每组text数量,取消下面这行注释即可
    # text_count = n(),
    text = paste(unique(text), collapse = " "),
    .groups = "drop"
  ) %>%
  # 移除辅助分组ID列,保留需要的输出字段
  select(title, text)

更简便的实现(借助data.table的rleid函数)

如果安装了data.table包,可以用专门为连续相同值生成分组ID的rleid()函数,代码更简洁:

library(dplyr)

result <- df %>%
  group_by(group_id = data.table::rleid(title), title) %>%
  summarise(
    text = paste(unique(text), collapse = " "),
    .groups = "drop"
  ) %>%
  select(title, text)
输出验证

用你提供的示例数据运行上述代码,得到的结果和预期完全一致:

title text                    
  <chr> <chr>                   
1 A     I like...               
2 B     I wish...               
3 C     review1 review2 review3 
4 D     Detecting...            
5 C     review1 review2         
6 E     New...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:33:40