结合名义变量的运行

Use*_*598 10 string r concatenation

我有一个数据集,其中包含在聊天会话期间创建的两个人之间的对话框.例如,

  1. "A:嗨"
  2. "A:你今天过得怎么样?"
  3. "B:很好.你好吗?"
  4. "A:我很好"
  5. "凉"

我想在R中创建一个简单的函数,它将在B说出一行之前组合A的行,这样我就有了一个看起来像这样的数据集:

  1. "A:你好A:你今天好吗?"
  2. "B:很好,你好吗?
  3. "A:我很好"
  4. "B:很酷"

我知道如何合并/组合单元格,但我不知道如何创建一个逻辑语句创建一个指示符A在B之前说话(反之亦然).

gag*_*ews 10

rle()功能可用于此目的.它确定给定向量中所有相等值的运行.

v1 <- c("A: Hi" , "A: How are you today", "B: Fine. How are you?", 
     "A: I'm good" ,"B: Cool") # input data

speakers <- rle(substring(v1, 1, 1))
Run Code Online (Sandbox Code Playgroud)

rle()现在可以使用函数的输出来相应地分割对话部分,然后将它们组合以获得期望的结果.

ids <- rep(paste(1:length(speakers$lengths)), speakers$lengths) 
unname(sapply(split(v1, ids), function(monologue) {
   # concatenate all statements in a "monologue"
   monologue[-1] <- substring(monologue[-1], 4)
   paste(monologue, collapse=" ")
}))
Run Code Online (Sandbox Code Playgroud)

结果:

## [1] "A: Hi How are you today"
## [2] "B: Fine. How are you?"
## [3] "A: I'm good"             
## [4] "B: Cool"   
Run Code Online (Sandbox Code Playgroud)