R摆动:按A列分组,仅在B和C列中保留不同的值,并在C列中保留求和值

时间:2019-07-02 09:44:37

标签: r group-by dplyr distinct summarize

我想按列A分组,然后对列CB中的不同值在列C中的值求和。是否可以在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

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:0)

另一种可能是:

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))