【问题标题】:Using the r dplyr library to generate aggregate numbers in a new column使用 r dplyr 库在新列中生成聚合数字
【发布时间】:2019-02-27 20:57:29
【问题描述】:

我正在尝试使用dplyr 根据现有列中值的聚合在数据框中生成一个新列。鉴于我的数据框:

group1 <- c("2019","2019","2019","2018","2018","2017","2017","2017")
group2 <- c("2019-01-01", "2019-01-01","2019-01-01","2018-05-01","2018-06-01","2017-01-01","2017-01-01","2017-02-01")
group3 <- c("A","A","B","A","A","C","C","B")
df <- data.frame("Year" = group1,"Date" = group2,"Sample" = group3)

给予:

  Year      Date  Sample
1 2019 2019-01-01   A
2 2019 2019-01-01   A
3 2019 2019-01-01   B
4 2018 2018-05-01   A
5 2018 2018-06-01   A
6 2017 2017-01-01   C
7 2017 2017-01-01   C
8 2017 2017-02-01   B

所以我想生成新列“计数”,它为每一行提供每个样本的唯一日期总数。所以对于上述数据,我希望结果是:

  Year       Date Sample Count
1 2019 2019-01-01   A     1
2 2019 2019-01-01   A     1
3 2019 2019-02-01   B     1
4 2018 2018-05-01   A     2
5 2018 2018-06-01   C     2
6 2017 2017-01-01   C     1
7 2017 2017-01-01   C     1
8 2017 2017-02-01   B     1

我尝试在r 中使用以下代码:

df %>%
  group_by(Year) %>%
    group_by(Sample) %>%
      group_by(Date) %>%
        mutate(Count = n_distinct(Date))

但我没有得到正确答案!

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    你可以试试:

    library(dplyr)
    
    df %>% 
      group_by(Year, Sample) %>% 
      mutate(Count = n_distinct(Date))
    

    如果您想将多个变量传递给group_by,您需要将它们放在一起 - 您所做的是通过每个新语句取消之前的分组。

    此外,如果您想计算唯一日期,则不应按它们分组。

    上面的代码会给出:

    # A tibble: 8 x 4
    # Groups:   Year, Sample [6]
      Year  Date       Sample Count
      <fct> <fct>      <fct>  <int>
    1 2019  2019-01-01 A          1
    2 2019  2019-01-01 A          1
    3 2019  2019-01-01 B          1
    4 2018  2018-05-01 A          2
    5 2018  2018-06-01 A          2
    6 2018  2017-01-01 C          1
    7 2017  2017-01-01 C          1
    8 2017  2017-02-01 B          1
    

    请注意,您生成的数据框与您向我们展示的数据框不匹配。你的代码生成的数据框是:

      Year       Date Sample
    1 2019 2019-01-01      A
    2 2019 2019-01-01      A
    3 2019 2019-01-01      B
    4 2018 2018-05-01      A
    5 2018 2018-06-01      A
    6 2018 2017-01-01      C
    7 2017 2017-01-01      C
    8 2017 2017-02-01      B
    

    在给定的Year 中,唯一具有 2 个不同Dates 的SampleA(2018 年)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2017-03-21
      • 2016-06-03
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多