【问题标题】:R dplyr: group by without aggregate functionR dplyr:没有聚合函数的分组
【发布时间】:2020-05-07 09:50:59
【问题描述】:

我想对以下数据集执行不带聚合函数的 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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这里不需要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)
    

    【讨论】:

    • 您也可以使用df %&gt;% distinct(ID, year),因为distinct() 采用变量名称。
    • 好的,谢谢。那是更好的选择。它只是从我的脑海中溜走。
    猜你喜欢
    • 2020-01-07
    • 2021-12-02
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2021-10-29
    • 2017-04-22
    • 2011-04-11
    相关资源
    最近更新 更多