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

时间:2016-07-13 09:44:15

标签: r group-by 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             

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

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

对于&#39;群集&#39;如果某个客户端在同一日期属于不同的集群,它将是一个列表。

我以为我可以用dplyr包来做,如下所示:

library(dplyr)
ideal_df<-sample %>% 
    group_by(client, date) %>% 
    summarize( #some anonymous function)

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

1 个答案:

答案 0 :(得分:12)

我们可以使用toString在'客户'分组后将'{1}}元素连接在一起“

unique

或另一种选择是创建r1 <- sample_df %>% group_by(client, date) %>% summarise(cluster = toString(unique(cluster)))

list

我们可以r2 <- sample_df %>% group_by(client, date) %>% summarise(cluster = list(unique(cluster)))

unnest