#r #dplyr #timestamp #grouping
Вопрос:
Я работаю с набором данных телевизионного журнала по запросу и хочу определить и суммировать количество активных устройств между двумя различными временными метками. Я создал макет фрейма данных ниже; каждая строка представляет собой «сеанс» и содержит уникальный идентификатор клиента, уникальный идентификатор устройства, жанр просматриваемого шоу и время начала/окончания каждого сеанса:-
df<-structure(list(CustomerID = c("0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"0289d477-427e-4b91-bd4d-8fd579ef2b87", "0289d477-427e-4b91-bd4d-8fd579ef2b87",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "12a6dd1e-484c-4c94-a7ab-6443a58b4159",
"12a6dd1e-484c-4c94-a7ab-6443a58b4159", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fb442c22-2595-4245-9f49-a2ea3581ee88", "fb442c22-2595-4245-9f49-a2ea3581ee88",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "fc20bfb6-172e-4f55-9467-12ed99579503",
"fc20bfb6-172e-4f55-9467-12ed99579503", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"e4f0a5ef-f808-4869-9370-c7fcee63ea98", "e4f0a5ef-f808-4869-9370-c7fcee63ea98",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef", "aeffea0a-fdbf-4c88-8a47-8eaeee4339ef",
"aeffea0a-fdbf-4c88-8a47-8eaeee4339ef"), DeviceID = c("b8d7b4ab-3d1e-40a1-ba9e-13b7d82d519d",
"b8136ab5-3e81-4ead-a52b-f23609bc4899", "420dc9bf-c14e-4bcd-9559-e1b491f05182",
"b8136ab5-3e81-4ead-a52b-f23609bc4899", "ccb94e13-2004-4642-82fb-73fd2cdd979e",
"b8136ab5-3e81-4ead-a52b-f23609bc4899", "b8d7b4ab-3d1e-40a1-ba9e-13b7d82d519d",
"b8d7b4ab-3d1e-40a1-ba9e-13b7d82d519d", "ccb94e13-2004-4642-82fb-73fd2cdd979e",
"b8d7b4ab-3d1e-40a1-ba9e-13b7d82d519d", "420dc9bf-c14e-4bcd-9559-e1b491f05182",
"b8d7b4ab-3d1e-40a1-ba9e-13b7d82d519d", "420dc9bf-c14e-4bcd-9559-e1b491f05182",
"b8136ab5-3e81-4ead-a52b-f23609bc4899", "ccb94e13-2004-4642-82fb-73fd2cdd979e",
"b8136ab5-3e81-4ead-a52b-f23609bc4899", "420dc9bf-c14e-4bcd-9559-e1b491f05182",
"66a9e7dd-57ee-4c8a-a090-950cae9b02a1", "a8f4bb78-a0f2-476b-9303-2761b06a65fc",
"66a9e7dd-57ee-4c8a-a090-950cae9b02a1", "66a9e7dd-57ee-4c8a-a090-950cae9b02a1",
"a8f4bb78-a0f2-476b-9303-2761b06a65fc", "a8f4bb78-a0f2-476b-9303-2761b06a65fc",
"c293d135-800e-4a62-898d-f0959bf0870d", "66a9e7dd-57ee-4c8a-a090-950cae9b02a1",
"a8f4bb78-a0f2-476b-9303-2761b06a65fc", "09109879-1061-4325-ae85-9c853dbf7882",
"09109879-1061-4325-ae85-9c853dbf7882", "c293d135-800e-4a62-898d-f0959bf0870d",
"66a9e7dd-57ee-4c8a-a090-950cae9b02a1", "a8f4bb78-a0f2-476b-9303-2761b06a65fc",
"66a9e7dd-57ee-4c8a-a090-950cae9b02a1", "09109879-1061-4325-ae85-9c853dbf7882",
"66a9e7dd-57ee-4c8a-a090-950cae9b02a1", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"6caaebb0-775f-4da9-9d34-414e2cb02ef6", "6caaebb0-775f-4da9-9d34-414e2cb02ef6",
"41f98340-0724-4dcc-b9bd-1bdd12307f87", "41f98340-0724-4dcc-b9bd-1bdd12307f87",
"a481ffe1-9bfe-4cac-9da8-553c4da2e224", "41f98340-0724-4dcc-b9bd-1bdd12307f87",
"a481ffe1-9bfe-4cac-9da8-553c4da2e224", "07d11a53-9b21-4fa1-b055-41f0247c642f",
"66b65dcb-5416-4bcc-ac9e-2222e2d50a28", "c1ceebbb-24cf-4b1d-8576-8bcb3aaa4534",
"29277218-9798-406e-b9ee-717184bf6f0e", "41f98340-0724-4dcc-b9bd-1bdd12307f87",
"41f98340-0724-4dcc-b9bd-1bdd12307f87", "41f98340-0724-4dcc-b9bd-1bdd12307f87",
"66b65dcb-5416-4bcc-ac9e-2222e2d50a28", "66b65dcb-5416-4bcc-ac9e-2222e2d50a28",
"29277218-9798-406e-b9ee-717184bf6f0e", "c1ceebbb-24cf-4b1d-8576-8bcb3aaa4534",
"66b65dcb-5416-4bcc-ac9e-2222e2d50a28", "04ba4776-8afc-4e86-86de-7b85668bf075",
"a58aa3cc-a231-4a82-8377-56b34306a446", "04ba4776-8afc-4e86-86de-7b85668bf075",
"7c193822-4ce9-4086-b274-d013e2180ae1", "d2832ac1-f3fd-468a-ace9-efa6a4e25e41",
"d2832ac1-f3fd-468a-ace9-efa6a4e25e41", "7c193822-4ce9-4086-b274-d013e2180ae1",
"a58aa3cc-a231-4a82-8377-56b34306a446", "7c193822-4ce9-4086-b274-d013e2180ae1",
"7c193822-4ce9-4086-b274-d013e2180ae1", "d2832ac1-f3fd-468a-ace9-efa6a4e25e41",
"7c193822-4ce9-4086-b274-d013e2180ae1", "7c193822-4ce9-4086-b274-d013e2180ae1",
"4eb8bf81-1f5c-4593-8205-2d0a0d77d0d0", "7c193822-4ce9-4086-b274-d013e2180ae1",
"7c193822-4ce9-4086-b274-d013e2180ae1", "7c193822-4ce9-4086-b274-d013e2180ae1",
"58286c18-2df6-461b-8a04-096625f678d2", "58286c18-2df6-461b-8a04-096625f678d2",
"58286c18-2df6-461b-8a04-096625f678d2", "fc5d9b88-a545-4f69-9c55-7b57103a165c",
"3007c886-8fde-4b05-8ae5-b4f8df0467a1", "fc5d9b88-a545-4f69-9c55-7b57103a165c",
"fc5d9b88-a545-4f69-9c55-7b57103a165c", "fc5d9b88-a545-4f69-9c55-7b57103a165c",
"3007c886-8fde-4b05-8ae5-b4f8df0467a1", "58286c18-2df6-461b-8a04-096625f678d2",
"fc5d9b88-a545-4f69-9c55-7b57103a165c", "fc5d9b88-a545-4f69-9c55-7b57103a165c",
"3007c886-8fde-4b05-8ae5-b4f8df0467a1", "58286c18-2df6-461b-8a04-096625f678d2",
"3007c886-8fde-4b05-8ae5-b4f8df0467a1", "3007c886-8fde-4b05-8ae5-b4f8df0467a1",
"3007c886-8fde-4b05-8ae5-b4f8df0467a1"), ShowGenre = c("Music",
"Music", "Sport", "Drama", "Kids", "Documentary", "News", "Movie",
"Drama", "News", "News", "Kids", "Documentary", "Movie", "Movie",
"Documentary", "Movie", "Music", "Sport", "Movie", "Movie", "Movie",
"Drama", "News", "Movie", "Movie", "Documentary", "Movie", "Music",
"Drama", "News", "News", "Movie", "Drama", "News", "Documentary",
"Documentary", "Drama", "Music", "Sport", "Sport", "Movie", "Music",
"Drama", "Sport", "Drama", "Drama", "Kids", "Drama", "Documentary",
"Sport", "Music", "Music", "Documentary", "Drama", "News", "Music",
"Music", "Movie", "Documentary", "Documentary", "Documentary",
"Sport", "Music", "News", "News", "Sport", "Documentary", "Music",
"Documentary", "News", "Drama", "Drama", "Documentary", "News",
"Music", "Kids", "Drama", "Documentary", "News", "Drama", "Documentary",
"Movie", "News", "Kids", "Movie", "Music", "Kids", "Kids", "Movie",
"Music", "News", "Movie", "Kids", "Music", "Music", "Kids", "Kids",
"News", "Kids", "Movie", "Documentary"), SessionStart = structure(c(1612132904,
1612133106, 1612136282, 1612139373, 1612139378, 1612140041, 1612140405,
1612143192, 1612143292, 1612143854, 1612143976, 1612144065, 1612144220,
1612144263, 1612144334, 1612144356, 1612146166, 1612146226, 1612146248,
1612146440, 1612146989, 1612147206, 1612148624, 1612152735, 1612153241,
1612153475, 1612154929, 1612155104, 1612155562, 1612155992, 1612159668,
1612159851, 1612160073, 1612165858, 1612168664, 1612169607, 1612169662,
1612169779, 1612171481, 1612172015, 1612172166, 1612172358, 1612172446,
1612172505, 1612172544, 1612172601, 1612172607, 1612172969, 1612173898,
1612175729, 1612177333, 1612178891, 1612180467, 1612180651, 1612181087,
1612181168, 1612181233, 1612186335, 1612186358, 1612186740, 1612187098,
1612187181, 1612187519, 1612187704, 1612187730, 1612187890, 1612187936,
1612188139, 1612188486, 1612188494, 1612188580, 1612192309, 1612192504,
1612193382, 1612194334, 1612194365, 1612194396, 1612194579, 1612194762,
1612194984, 1612195094, 1612195096, 1612195252, 1612195837, 1612196401,
1612199002, 1612200677, 1612200762, 1612200829, 1612201556, 1612201802,
1612202166, 1612202555, 1612202852, 1612203272, 1612204749, 1612204989,
1612205005, 1612205067, 1612206077, 1612206260, 1612206263), tzone = "Europe/London", class = c("POSIXct",
"POSIXt")), SessionEnd = structure(c(1612137925, 1612139792,
1612140039, 1612141093, 1612139380, 1612143136, 1612140640, 1612143256,
1612146067, 1612144022, 1612152403, 1612144131, 1612144270, 1612144284,
1612144337, 1612144652, 1612146227, 1612146238, 1612146439, 1612146493,
1612152522, 1612148610, 1612149051, 1612153217, 1612153464, 1612154778,
1612155086, 1612155551, 1612155877, 1612156110, 1612159851, 1612160072,
1612160227, 1612168654, 1612171480, 1612169607, 1612169740, 1612172007,
1612172194, 1612172104, 1612172337, 1612172465, 1612172496, 1612172520,
1612172599, 1612172604, 1612172653, 1612175721, 1612174311, 1612177318,
1612177340, 1612178923, 1612180650, 1612180839, 1612181167, 1612181232,
1612181276, 1612186398, 1612186358, 1612186885, 1612187809, 1612187184,
1612187704, 1612187890, 1612187789, 1612187899, 1612188138, 1612188485,
1612188498, 1612189623, 1612188597, 1612192404, 1612193479, 1612195723,
1612194375, 1612194396, 1612194578, 1612194761, 1612194984, 1612195044,
1612195251, 1612195517, 1612195252, 1612195864, 1612196431, 1612200445,
1612201368, 1612200786, 1612200896, 1612201633, 1612202122, 1612204649,
1612205037, 1612203929, 1612203278, 1612204749, 1612205014, 1612205834,
1612205067, 1612206261, 1612206305, 1612206343), tzone = "Europe/London", class = c("POSIXct",
"POSIXt"))), class = "data.frame", row.names = c(NA, -102L))
Таким образом, в этом фрейме данных имеется 6 уникальных идентификаторов клиентов, каждый из которых содержит различное количество уникальных устройств. Ниже приведено количество уникальных устройств по заказчикам:-
* <chr> <int>
1 0289d477-427e-4b91-bd4d-8fd579ef2b87 4
2 12a6dd1e-484c-4c94-a7ab-6443a58b4159 4
3 aeffea0a-fdbf-4c88-8a47-8eaeee4339ef 3
4 e4f0a5ef-f808-4869-9370-c7fcee63ea98 5
5 fb442c22-2595-4245-9f49-a2ea3581ee88 1
6 fc20bfb6-172e-4f55-9467-12ed99579503 6
Вы можете себе представить, что в современных телевизионных сервисах по запросу кто-то в семье может смотреть программу по телевизору с большим экраном, в то время как в то же время кто-то в другой комнате смотрит другую программу на планшете/мобильном телефоне/ и т. Д.
Учитывая этот контекст, я хочу суммировать следующее:-
- Сколько сеансов на одного клиента активно одновременно? Используя метку времени «Начало сеанса» первого активного сеанса и метку времени «Конец сеанса» последнего активного сеанса в качестве определенного периода.
- Количество уникальных устройств, активных в течение этого периода сеансов
- Количество уникальных жанров, которые просматривались во время активных сессий
Желаемый результат
Вот первые две строки фрейма данных:-
Если бы это были единственные две строки, с которыми нам приходилось работать, то желаемый результат выглядел бы так:-
CustomerID Num_Unique_Devices Num_Unique_Genre Genres
0289d477-427e-4b91-bd4d-8fd579ef2b87 2 1 Music
StartTime_FirstSession EndTime_LastSession
2021-01-31 22:41:44 2021-02-01 00:36:32
Может ли кто-нибудь помочь придумать решение для достижения такого результата? Это требует чего-то, что в настоящее время выходит за рамки моего опыта, поэтому любая помощь будет очень признательна. Спасибо 🙂
Ответ №1:
library(tidyverse)
Мы можем начать с добавления индикатора, который показывает, перекрывается ли текущая сессия
с предыдущим разделом. Это можно сделать так
(step1 <- df %>%
as_tibble() %>%
group_by(CustomerID) %>%
arrange(SessionStart) %>%
mutate(
overlap = SessionStart < lag(SessionEnd)
)
)
#> # A tibble: 102 x 6
#> # Groups: CustomerID [6]
#> CustomerID DeviceID ShowGenre SessionStart SessionEnd overlap
#> <chr> <chr> <chr> <dttm> <dttm> <lgl>
#> 1 0289d477-~ b8d7b4a~ Music 2021-01-31 22:41:44 2021-02-01 00:05:25 NA
#> 2 0289d477-~ b8136ab~ Music 2021-01-31 22:45:06 2021-02-01 00:36:32 TRUE
#> 3 0289d477-~ 420dc9b~ Sport 2021-01-31 23:38:02 2021-02-01 00:40:39 TRUE
#> 4 0289d477-~ b8136ab~ Drama 2021-02-01 00:29:33 2021-02-01 00:58:13 TRUE
#> 5 0289d477-~ ccb94e1~ Kids 2021-02-01 00:29:38 2021-02-01 00:29:40 TRUE
#> 6 0289d477-~ b8136ab~ Document~ 2021-02-01 00:40:41 2021-02-01 01:32:16 FALSE
#> 7 0289d477-~ b8d7b4a~ News 2021-02-01 00:46:45 2021-02-01 00:50:40 TRUE
#> 8 0289d477-~ b8d7b4a~ Movie 2021-02-01 01:33:12 2021-02-01 01:34:16 FALSE
#> 9 0289d477-~ ccb94e1~ Drama 2021-02-01 01:34:52 2021-02-01 02:21:07 FALSE
#> 10 0289d477-~ b8d7b4a~ News 2021-02-01 01:44:14 2021-02-01 01:47:02 TRUE
#> # ... with 92 more rows
Значения NA в столбце перекрытия должны быть просто изменены на FALSE. Мы можем сделать
это с помощью coalesce. Следующее, что нам нужно,-это создать номер сеанса, который
увеличивается при каждом запуске неперекрывающегося сеанса. Один из способов сделать это-
с cumsum(!overlap)
помощью .
(step2 <- step1 %>%
mutate(
SessionID = cumsum(!coalesce(overlap, FALSE))
)
)
#> # A tibble: 102 x 7
#> # Groups: CustomerID [6]
#> CustomerID DeviceID ShowGenre SessionStart SessionEnd overlap
#> <chr> <chr> <chr> <dttm> <dttm> <lgl>
#> 1 0289d477-~ b8d7b4a~ Music 2021-01-31 22:41:44 2021-02-01 00:05:25 NA
#> 2 0289d477-~ b8136ab~ Music 2021-01-31 22:45:06 2021-02-01 00:36:32 TRUE
#> 3 0289d477-~ 420dc9b~ Sport 2021-01-31 23:38:02 2021-02-01 00:40:39 TRUE
#> 4 0289d477-~ b8136ab~ Drama 2021-02-01 00:29:33 2021-02-01 00:58:13 TRUE
#> 5 0289d477-~ ccb94e1~ Kids 2021-02-01 00:29:38 2021-02-01 00:29:40 TRUE
#> 6 0289d477-~ b8136ab~ Document~ 2021-02-01 00:40:41 2021-02-01 01:32:16 FALSE
#> 7 0289d477-~ b8d7b4a~ News 2021-02-01 00:46:45 2021-02-01 00:50:40 TRUE
#> 8 0289d477-~ b8d7b4a~ Movie 2021-02-01 01:33:12 2021-02-01 01:34:16 FALSE
#> 9 0289d477-~ ccb94e1~ Drama 2021-02-01 01:34:52 2021-02-01 02:21:07 FALSE
#> 10 0289d477-~ b8d7b4a~ News 2021-02-01 01:44:14 2021-02-01 01:47:02 TRUE
#> # ... with 92 more rows, and 1 more variable: SessionID <int>
Наконец, теперь мы группируем как идентификатор клиента, так и идентификатор сеанса и создаем
окончательный кадр данных с обобщением.
(step3 <- step2 %>%
group_by(CustomerID, SessionID) %>%
summarise(
n_unique_devices = n_distinct(DeviceID),
n_unique_genres = n_distinct(ShowGenre),
first_session_start = min(SessionStart),
last_session_end = max(SessionEnd),
.groups = "drop"
)
)
#> # A tibble: 69 x 6
#> CustomerID SessionID n_unique_devices n_unique_genres first_session_start
#> * <chr> <int> <int> <int> <dttm>
#> 1 0289d477-427e~ 1 4 4 2021-01-31 22:41:44
#> 2 0289d477-427e~ 2 2 2 2021-02-01 00:40:41
#> 3 0289d477-427e~ 3 1 1 2021-02-01 01:33:12
#> 4 0289d477-427e~ 4 3 3 2021-02-01 01:34:52
#> 5 0289d477-427e~ 5 2 2 2021-02-01 01:50:20
#> 6 0289d477-427e~ 6 1 1 2021-02-01 01:52:14
#> 7 0289d477-427e~ 7 1 1 2021-02-01 01:52:36
#> 8 0289d477-427e~ 8 1 1 2021-02-01 02:22:46
#> 9 12a6dd1e-484c~ 1 1 1 2021-02-01 02:23:46
#> 10 12a6dd1e-484c~ 2 1 1 2021-02-01 02:24:08
#> # ... with 59 more rows, and 1 more variable: last_session_end <dttm>
Создано 2021-07-14 пакетом reprex (v1.0.0)
Комментарии:
1. Это блестяще, большое вам спасибо за это решение, оно хорошо работает. Мне было интересно, как добавить дополнительный столбец, который содержит строку символов уникальных жанров, просмотренных на шаге 3?
2. Вы могли бы добавить
genres = str_c(unique(ShowGenre), collapse = ",")
, чтобы подвести итог