R tibble: группировка по столбцу A, сохранение только отдельных значений в столбцах B и C и суммирование значений в столбце C - PullRequest
1 голос
/ 02 июля 2019

Я хочу сгруппировать по столбцу A, а затем суммировать значения в столбце C для различных значений в столбцах B и 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 ]

1 голос
/ 02 июля 2019

Вы можете использовать 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
0 голосов
/ 02 июля 2019

Другая возможность может быть:

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