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

  • “A:嗨”
  • “A:今天好吗”
  • “B:很好。你好吗?”
  • “答:我很好”
  • “酷”

  • 我想在R中创建一个简单的函数,它将在B说话之前将A的行合并为一行,这样我就有了一个数据集,如下所示:
  • “A:嗨,A:你今天好吗?”
  • “B:你好吗?
  • “答:我很好”
  • “B:酷”

  • 我知道如何合并/合并单元格,但是我不确定如何创建逻辑语句,从而为A在B之前讲话的行创建一个指示符(反之亦然)。

    最佳答案

    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))
    

    现在可以使用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=" ")
    }))
    

    结果:
    ## [1] "A: Hi How are you today"
    ## [2] "B: Fine. How are you?"
    ## [3] "A: I'm good"
    ## [4] "B: Cool"
    

    关于r - 结合名义变量的运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28526566/

    10-10 14:07