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

R按分组跨行拼接内容并保留发言序列的实现方法

实现方法

核心逻辑

你之前的方法问题出在直接按speaker全局分组,没有区分同一个说话人被其他说话人打断的不连续发言块。我们可以先给每组dyad内的连续相同发言块生成唯一标识,再按块拼接文本即可适配任意长度的连续发言场景。

dplyr 实现代码

library(dplyr)

result <- dat %>%
  # 按dyad分组处理
  group_by(dyad) %>%
  # 生成连续发言块ID:每次说话人变化时ID+1
  mutate(block_id = cumsum(speaker != lag(speaker, default = first(speaker)))) %>%
  # 按dyad、块ID、speaker分组,拼接同一块内的文本
  group_by(dyad, block_id, speaker) %>%
  summarise(text = paste(text, collapse = ". "), .groups = "drop") %>%
  # 去掉不需要的block_id列,调整输出顺序
  select(dyad, speaker, text)

运行后输出结果和要求完全匹配:

print(result)
# # A tibble: 6 × 3
#    dyad speaker text                                               
#   <dbl> <chr>   <chr>                                              
# 1     1 John    Let's play. We're wasting time. Let's make a record!
# 2     1 Paul    Let's work it out first                            
# 3     1 John    Why?                                               
# 4     2 George  It goes like this                                  
# 5     2 Ringo   Hold on. Have to tighten my snare                  
# 6     2 George  Ready? 

可选:data.table 实现(性能更优,适合超大对话数据集)

library(data.table)
setDT(dat)
result <- dat[, block_id := cumsum(speaker != shift(speaker, fill = first(speaker))), by = dyad
              ][, .(text = paste(text, collapse = ". ")), by = .(dyad, block_id, speaker)
                ][, block_id := NULL][]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:39:00