R tibble:按A列分组,仅保留B列和C列中的不同值以及C列中的总和值
R tibble: Group by column A, keep only distinct values in column B and C and sum values in column C
我想按列 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
你可以使用 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
另一种可能是:
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))
我想按列 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
你可以使用 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
另一种可能是:
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))