我有一个文件,其中包含客户和代理商之间的消息,但是这些消息未按对话分组,即有唯一的对话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
有帮助吗?
答案 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))