按列分组并将列汇总到列表中

Joh*_*hiu 10 group-by r dplyr

我有这样的数据帧:

sample_df<-data.frame(
   client=c('John', 'John','Mary','Mary'),
   date=c('2016-07-13','2016-07-13','2016-07-13','2016-07-13'),
   cluster=c('A','B','A','A'))

#sample data frame
   client date         cluster
1  John   2016-07-13    A 
2  John   2016-07-13    B 
3  Mary   2016-07-13    A 
4  Mary   2016-07-13    A             
Run Code Online (Sandbox Code Playgroud)

我想将其转换为不同的格式,如下所示:

#ideal data frame
   client date         cluster
1  John   2016-07-13    c('A,'B') 
2  Mary   2016-07-13    A 
Run Code Online (Sandbox Code Playgroud)

对于"群集"列,如果某个客户端在同一日期属于不同的群集,则它将是一个列表.

我认为我可以用dplyr包来做,如下所述

library(dplyr)
ideal_df<-sample %>% 
    group_by(client, date) %>% 
    summarize( #some anonymous function)
Run Code Online (Sandbox Code Playgroud)

但是,我不知道在这种情况下如何编写匿名函数.有没有办法将数据转换为理想格式?

akr*_*run 15

我们可以使用"客户端"分组后将"群集"中toStringunique元素连接在一起

r1 <- sample_df %>% 
         group_by(client, date) %>%
         summarise(cluster = toString(unique(cluster)))
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是创建一个list

r2 <- sample_df %>%
         group_by(client, date) %>% 
         summarise(cluster = list(unique(cluster)))
Run Code Online (Sandbox Code Playgroud)

我们可以 unnest

library(tidyr)
r2 %>%
    ungroup %>%
     unnest()
Run Code Online (Sandbox Code Playgroud)