То, что вы описываете, является очень распространенным паттерном: группируйте по переменным, а затем суммируйте.Вот простой способ сделать это с помощью пакета dplyr
, который позволяет нам легко и согласованно манипулировать кадрами данных:
library(dplyr)
df %>%
group_by(id, video) %>%
summarize(events = paste(event_type ,collapse = "-"))
Однако это дает нам следующий вывод:
# A tibble: 4 x 3
# Groups: id [?]
id video events
<int> <fct> <chr>
1 21 Video -math load-load-play-seek…
2 21 Video - Math and Speed stop
3 22 Video -math seek
4 22 Video - Math and Speed load-play-pause-stop
Эти данные представлены в формате "tidy" - строка для каждого наблюдения.Но ваш окончательный вывод показывает, что вы хотите данные в не аккуратном формате.Чтобы изменить форму данных, пригодится другой пакет, tidyr
.
library(dplyr)
library(tidyr)
df %>%
group_by(id, video) %>%
summarize(events = paste(event_type ,collapse = "-")) %>%
spread(key = video, value = events)
расширение столбца video
и использование столбца events
для переменных даст вам желаемый результат.