【问题标题】:R tibble: Group by column A, keep only distinct values in column B and C and sum values in column CR tibble:按 A 列分组,仅保留 B 列和 C 列中的不同值,以及 C 列中的总和值
【发布时间】:2019-11-12 22:24:09
【问题描述】:

我想按列 A 分组,然后对列 C 中的值求和,以获得列 BC 中的不同值。是否有可能在summarise 子句中做到这一点? 我知道在聚合之前使用 distinct() 函数是可能的。类似的东西怎么样: 数据:

df <- tibble(A = c(1,1,1,2,2), B = c('a','b','b','a','a'), C=c(5,10,10,15,15))

我的尝试不起作用:

df %>% 
group_by(A) %>% 
summarise(sumC=sum(distinct(B,C) %>% select(C)))

期望的输出:

A sumC
1 15
2 15

【问题讨论】:

    标签: r group-by dplyr distinct summarize


    【解决方案1】:

    另一种可能是:

    df %>%
     group_by(A, B, C) %>%
     slice(1) %>%
     group_by(A) %>%
     summarise(sumC = sum(C))
    
          A  sumC
      <dbl> <dbl>
    1     1    15
    2     2    15
    

    或者对@Maurits Evers 的回答有所不同:

    df %>%
     distinct(A, B, C) %>%
     group_by(A) %>%
     summarise(sumC = sum(C))
    

    【讨论】:

      【解决方案2】:

      你可以使用duplicated

      df %>%
          group_by(A) %>%
          summarise(sumC = sum(C[!duplicated(B)]))
      ## A tibble: 2 x 2
      #      A  sumC
      #  <dbl> <dbl>
      #1     1    15
      #2     2    15
      

      distinct

      df %>%
          group_by(A) %>%
          distinct(B, C) %>%
          summarise(sumC = sum(C))
      ## A tibble: 2 x 2
      #      A  sumC
      #  <dbl> <dbl>
      #1     1    15
      #2     2    15
      

      【讨论】:

        猜你喜欢
        • 2021-11-24
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        相关资源
        最近更新 更多