У меня есть датафрейм, в котором каждая строка имеет уникальный идентификатор разговора. Каждый разговор состоит из уникальных сообщений, которые могут быть входящими или ответными (но не обоими) (клиенты публикуют входящие сообщения, а агенты публикуют ответы). Каждое сообщение имеет оценку настроения.
Я хочу рассчитать изменение настроения путем измерения разницы между первым входящим сообщением и последним входящим сообщением. Ниже приведен пример фрейма данных.
# A tibble: 11 x 11
conversationID postID postType conversationOrd… incomingOrder responseOrder createdDate closedDate convResponseHan… tar sentence_score
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl>
1 25455628 4.74e7 Incomin… 2 2 NA 10/07/2019… 10/07/201… NA NA 0
2 25455725 4.74e7 Incomin… 1 1 NA 10/07/2019… 10/10/201… NA NA 0
3 25455725 4.74e7 Incomin… 2 2 NA 10/07/2019… 10/10/201… NA NA 0
4 25455725 4.74e7 Incomin… 3 3 NA 10/07/2019… 10/10/201… NA NA 0
5 25455725 4.18e6 Response 4 NA 1 10/08/2019… 10/10/201… 23.4 748. 0.184
6 25456349 4.74e7 Incomin… 1 1 NA 10/07/2019… 10/08/201… NA NA 0.3
7 25456349 4.18e6 Response 2 NA 1 10/07/2019… 10/08/201… 3.17 5.15 0.440
8 25456349 4.74e7 Incomin… 3 2 NA 10/07/2019… 10/08/201… NA NA 0.113
9 25456349 4.18e6 Response 4 NA 2 10/07/2019… 10/08/201… 0.67 3.03 0.786
10 25456349 4.74e7 Incomin… 5 3 NA 10/07/2019… 10/08/201… NA NA 0.214
11 25456349 4.18e6 Response 6 NA 3 10/07/2019… 10/08/201… 1.58 2.43 0.251
В идеальном сценарии я бы хотел другой столбец, называемый sentimentConversion, в котором указано, изменяется ли диалог (с точки зрения клиента) с положительного на отрицательный, с отрицательного на положительный или остается таким же.
Вот вывод dput()
.
structure(list(conversationID = c(25455628, 25455725, 25455725,
25455725, 25455725, 25456349, 25456349, 25456349, 25456349, 25456349,
25456349), postID = c(47371258, 47371485, 47371486, 47373371,
4184259, 47373084, 4181224, 47374183, 4181324, 47375140, 4181430
), postType = c("Incoming Post", "Incoming Post", "Incoming Post",
"Incoming Post", "Response", "Incoming Post", "Response", "Incoming Post",
"Response", "Incoming Post", "Response"), conversationOrder = c(2,
1, 2, 3, 4, 1, 2, 3, 4, 5, 6), incomingOrder = c(2, 1, 2, 3,
NA, 1, NA, 2, NA, 3, NA), responseOrder = c(NA, NA, NA, NA, 1,
NA, 1, NA, 2, NA, 3), createdDate = c("10/07/2019 08:45:14 PM -0400",
"10/07/2019 08:48:25 PM -0400", "10/07/2019 08:48:25 PM -0400",
"10/07/2019 09:20:26 PM -0400", "10/08/2019 09:16:24 AM -0400",
"10/07/2019 09:15:45 PM -0400", "10/07/2019 09:20:52 PM -0400",
"10/07/2019 09:35:47 PM -0400", "10/07/2019 09:38:47 PM -0400",
"10/07/2019 09:55:49 PM -0400", "10/07/2019 09:58:13 PM -0400"
), closedDate = c("10/07/2019 08:49:36 PM -0400", "10/10/2019 09:16:44 AM -0400",
"10/10/2019 09:16:44 AM -0400", "10/10/2019 09:16:44 AM -0400",
"10/10/2019 09:16:44 AM -0400", "10/08/2019 09:06:33 PM -0400",
"10/08/2019 09:06:33 PM -0400", "10/08/2019 09:06:33 PM -0400",
"10/08/2019 09:06:33 PM -0400", "10/08/2019 09:06:33 PM -0400",
"10/08/2019 09:06:33 PM -0400"), convResponseHandleTime = c(NA,
NA, NA, NA, 23.42, NA, 3.17, NA, 0.67, NA, 1.58), tar = c(NA,
NA, NA, NA, 748.28, NA, 5.15, NA, 3.03, NA, 2.43), sentence_score = c(0,
0, 0, 0, 0.183532587096449, 0.3, 0.439929079364222, 0.1125, 0.785712147332011,
0.21354963890361, 0.251196909045889)), row.names = c(NA, -11L
), class = c("tbl_df", "tbl", "data.frame"))