Поток строк по столбцам в R - PullRequest
0 голосов
/ 08 июня 2018

У меня есть лог-файл с большим количеством информации.Пример:

event_type| video                    |id
------------------------------------------------ 
load      | Video -math              | 21
load      | Video -math              | 21
load      | Video - Math and Speed   | 22
play      | Video -math              | 21
seek      | Video -math              | 21
pause     | Video -math              | 21
seek      | Video -math              | 21
play      | Video -math              | 21
pause     | Video -math              | 21
play      | Video - Math and Speed   | 22
pause     | Video - Math and Speed   | 22
stop      | Video - Math and Speed   | 22
stop      | Video - Math and Speed   | 21
seek      | Video -math              | 22

Я хочу создать поток строк по идентификатору и видео.

  id    Video -math                             Video - Math and Speed              
 21  |   load-load-play-seek-pause-play-pause  | stop
 22  |   seek                                  | load-play-pause-stop

Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2018

То, что вы описываете, является очень распространенным паттерном: группируйте по переменным, а затем суммируйте.Вот простой способ сделать это с помощью пакета 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 для переменных даст вам желаемый результат.

...