将行分组到对话并添加对话号

时间:2019-06-05 20:18:24

标签: r dplyr

我有一个文件,其中包含客户和代理商之间的消息,但是这些消息未按对话分组,即有唯一的对话ID。幸运的是,随后的每个回复中都包含原始消息。该消息在“文本”列中。这可以通过下面的示例轻松解释

actionDateTime      text         response                    postTime

2019-01-01 12:00    Hi           N/A                         2019-01-01 12:00
2019-01-01 12:01    Hi           Hello!                      2019-01-01 12:00
2019-01-01 12:02    Hi           How can I help?             2019-01-01 12:00
.
.
.
2019-01-02 12:00    Hi there      N/A                        2019-01-01 12:00
2019-01-02 12:01    Hi there      Morning                    2019-01-01 12:00
2019-01-02 12:02    Hi there      How can I help?            2019-01-01 12:00



所以我尝试了下面的代码进行分组,但这不起作用。

df %>%
group_by(text, postTime) %>%
mutate(convID = row_number()) %>%
ungroup()

这确实输出具有convID的文件,但不是我想要的方式。实际上,我不知道它的编号方式。我相信这是因为我在group_by中使用了两个变量。但是,仅使用一个不会起作用,因为两个不同的人可以同时发消息,或者两个不同的消息看起来很相似(例如,很多人只能以“ Hi”开头)。

当我尝试仅对“文本”分组时,它仍会在对话中为我提供数字,而不是唯一的ID。再次说明如下

我得到的

text         response                    postTime           convID

Hi           N/A                         2019-01-01 12:00   1
Hi           Hello!                      2019-01-01 12:00   2
Hi           How can I help?             2019-01-01 12:00   3
.
.
.
Hi there      N/A                        2019-01-01 12:00   1
Hi there      Morning                    2019-01-01 12:00   2
Hi there      How can I help?            2019-01-01 12:00   3

我想要什么:

text         response                    postTime           convID

Hi           N/A                         2019-01-01 12:00   1
Hi           Hello!                      2019-01-01 12:00   1
Hi           How can I help?             2019-01-01 12:00   1
.
.
.
Hi there      N/A                        2019-01-01 12:00   2
Hi there      Morning                    2019-01-01 12:00   2
Hi there      How can I help?            2019-01-01 12:00   2

有帮助吗?

1 个答案:

答案 0 :(得分:0)

我们可能需要group_indices

library(dplyr)
df %>%
  mutate(convID = group_indices(., text, postTime))
#    actionDateTime     text        response         postTime convID
#1 2019-01-01 12:00       Hi             N/A 2019-01-01 12:00      1
#2 2019-01-01 12:01       Hi          Hello! 2019-01-01 12:00      1
#3 2019-01-01 12:02       Hi How can I help? 2019-01-01 12:00      1
#4 2019-01-02 12:00 Hi there             N/A 2019-01-01 12:00      2
#5 2019-01-02 12:01 Hi there         Morning 2019-01-01 12:00      2
#6 2019-01-02 12:02 Hi there How can I help? 2019-01-01 12:00      2

数据

df <- structure(list(actionDateTime = c("2019-01-01 12:00", "2019-01-01 12:01", 
"2019-01-01 12:02", "2019-01-02 12:00", "2019-01-02 12:01", "2019-01-02 12:02"
), text = c("Hi", "Hi", "Hi", "Hi there", "Hi there", "Hi there"
), response = c("N/A", "Hello!", "How can I help?", "N/A", "Morning", 
"How can I help?"), postTime = c("2019-01-01 12:00", "2019-01-01 12:00", 
"2019-01-01 12:00", "2019-01-01 12:00", "2019-01-01 12:00", "2019-01-01 12:00"
)), class = "data.frame", row.names = c(NA, -6L))