gpt4 book ai didi

R 在组内跨行连接但保留序列

转载 作者:行者123 更新时间:2023-12-04 13:05:13 26 4
gpt4 key购买 nike

我的数据包含来自许多对句的文本,这些文本被分成句子,每行一个。我想在 dyads 中连接说话者的数据,本质上是将数据转换为说话轮流。这是一个示例数据集:

dyad <- c(1,1,1,1,1,2,2,2,2)
speaker <- c("John", "John", "John", "Paul","John", "George", "Ringo", "Ringo", "George")
text <- c("Let's play",
"We're wasting time",
"Let's make a record!",
"Let's work it out first",
"Why?",
"It goes like this",
"Hold on",
"Have to tighten my snare",
"Ready?")

dat <- data.frame(dyad, speaker, text)

这就是我想要的数据:

  dyad speaker                                                text
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?

我试过按发件人分组并从 dplyr 粘贴/折叠,但串联组合了发件人的所有文本,但没有保留发言顺序。例如,John 的最后一句话(“为什么”)在输出中与他的其他文本一起结束,而不是在 Paul 的评论之后。我还尝试检查下一位发言者(使用 lead(sender))是否与当前发言者相同,然后合并,但它只处理相邻行,在这种情况下,它错过了示例中 John 的第三条评论.看起来应该很简单,但我无法实现。并且应该灵活地组合给定演讲者的任何一系列连续行。

提前致谢

最佳答案

使用 rleid(来自 data.table)创建另一个组并粘贴summarise中的行/p>

library(dplyr)
library(data.table)
library(stringr)
dat %>%
group_by(dyad, grp = rleid(speaker), speaker) %>%
summarise(text = str_c(text, collapse = ' '), .groups = 'drop') %>%
select(-grp)

-输出

# 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?

关于R 在组内跨行连接但保留序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69858088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com