R中列的字符串流

时间:2018-06-08 11:45:27

标签: r stringstream

我有一个包含大量信息的日志文件。例如:

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

有什么想法吗?

1 个答案:

答案 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列作为变量,将为您提供所需的结果。