r - 按列分组并将一列汇总为列表

标签 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 

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

我想我可以用 dplyr 包来做,并推荐如下
library(dplyr)
ideal_df<-sample %>% 
    group_by(client, date) %>% 
    summarize( #some anonymous function)

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

最佳答案

我们可以使用 toString连接 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
library(tidyr)
r2 %>%
    ungroup %>%
     unnest()

关于r - 按列分组并将一列汇总为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348074/

相关文章:

r - 基于向量子集索引数据帧

r - 使 igraph 更清晰易读

R - 帮助将因子转换为日期 (%m/%d/%Y %H :%M)

python - 如何以自适应间隔对 Pandas 中的偏斜数据进行分组

r - 加入 2 个数据集并创建找到匹配项的新行

r - 使用 dplyr 计算第 n 行的自定义函数

R:如何简化重新运行的输出(来自 purrr)?

MySQL如何从多行中分组并选择某些状态?

mysql - 语法错误或访问冲突 : 1055 'wockhardt_indigo.stock_levels.id' isn't in GROUP BY

r - 我可以按列名从多列中提取值吗?