首页 > 解决方案 > R dplyr:没有聚合函数的分组

问题描述

我想在以下数据集上执行没有聚合函数的 group_by:

df <- data.frame(ID = c(1,1,1,2,2,3,3,3,3),
                 product = c("A","B","C","D","E","A","A","B","C"),
                 year = c(2018,2018,2019,2018,2018,2017,2018,2019,2018))
  ID product year
1  1       A 2018
2  1       B 2018
3  1       C 2019
4  2       D 2018
5  2       E 2018
6  3       A 2017
7  3       A 2018
8  3       B 2019
9  3       C 2018

我想创建 2 个单独的数据集:一个用于产品,一个用于年份。问题是当我尝试 group_by 时,它需要一个聚合函数,而我不想要那个。在一种情况下,我只需要 ID 和 PRODUCT 的唯一组合,在另一种情况下需要 ID 和 YEAR 的唯一组合(所以 2 个单独的数据框)

产品

  ID product
1  1       A
2  1       B
3  1       C
4  2       D
5  2       E
6  3       A
7  3       B
8  3       C

年:

  ID year
1  1 2018
2  1 2019
3  2 2018
4  3 2017
5  3 2018
6  3 2019

标签: rdplyr

解决方案


您不需要group_by此处,因为您想要选定列的唯一行。如果您想要许多列的独特组合,您可以使用lapply.

list_data <- lapply(df[-1], function(x) unique(cbind(df[1], x)))

如果只有两列并且我们需要使用dplyr,我们可以使用distinct.

Product <- df %>% distinct(ID, product)
YEAR <- df %>% distinct(ID, year)

推荐阅读