我有一个包含大量信息的日志文件。例如:
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和视频制作字符串流。
id Video -math Video - Math and Speed
21 | load-load-play-seek-pause-play-pause | stop
22 | seek | load-play-pause-stop
有什么想法吗?
答案 0 :(得分:1)
您所描述的是一种非常常见的模式:按变量分组,然后进行汇总。这是使用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
列作为变量,将为您提供所需的结果。