簡體   English   中英

Dplyr 相當於 SUM over PARTITION BY

[英]Dplyr equivalent of SUM over PARTITION BY

我敢肯定這個問題以前被問過,但我找不到答案。

這是我的數據:

df <- data.frame(group=c("a","a","a","b","b","c"), value=c(1,2,3,4,5,7))
df
#>   group value
#> 1     a     1
#> 2     a     2
#> 3     a     3
#> 4     b     4
#> 5     b     5
#> 6     c     7

我想要第三列,其中包含每個“組”的“價值”總和,如下所示:

#>   group value group_sum
#> 1     a     1         6
#> 2     a     2         6
#> 3     a     3         6
#> 4     b     4         9
#> 5     b     5         9
#> 6     c     7         7

我怎樣才能用 dplyr 做到這一點?

使用 dplyr -

df %>%
    group_by(group) %>%
    mutate(group_sum = sum(value))

還沒有人提到data.table

library(data.table)

dat <- data.table(df)

dat[, `:=`(sums = sum(value)), group]

dat轉換為:

   group value sums
1:     a     1    6
2:     a     2    6
3:     a     3    6
4:     b     4    9
5:     b     5    9
6:     c     7    7
left_join(
  df,
  df %>% group_by(group) %>% summarise(group_sum = sum(value)),
  by = c("group")
)

我不知道如何一步,但是

df_avg <- df %>% group_by(group) %>% summarize(group_sum=sum(value))  
df %>% full_join(df_avg,by="group")

作品。 (這基本上相當於@KeqiangLi 的回答。)

來自基礎 R 的ave()在這里也很有用:

df %>% mutate(group_sum=ave(value,group,FUN=sum))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM