如何在 R 中按组创建一个新变量,该变量是列的总和?

How to create a new variable that is the sum of a column, by group, in R?

我正在尝试在我的数据框中创建一个新变量,它是一个变量的组特定总和。例如:

df <- data.frame (group  = c(1, 1, 1, 2, 2, 2),
                  variable = c(1, 2, 1, 3, 4, 5)
)
df
  group variable
1     1        1
2     1        2
3     1        1
4     2        3
5     2        4
6     2        5

我想要一个按组对变量求和的新变量,得到如下所示的内容:

 group variable sum
1     1        1   4
2     1        2   4
3     1        1   4
4     2        3  12
5     2        4  12
6     2        5  12

谢谢!

基础 R

with(df, ave(variable, group, FUN = sum))
# [1]  4  4  4 12 12 12

(重新分配到 df$sum <- with(df, ...) 的框架中。)

dplyr

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(sum = sum(variable)) %>%
  ungroup()
# # A tibble: 6 x 3
#   group variable   sum
#   <dbl>    <dbl> <dbl>
# 1     1        1     4
# 2     1        2     4
# 3     1        1     4
# 4     2        3    12
# 5     2        4    12
# 6     2        5    12

data.table

library(data.table)
DF <- as.data.table(df)
DF[, sum := sum(variable), by = .(group) ]
DF
#    group variable sum
# 1:     1        1   4
# 2:     1        2   4
# 3:     1        1   4
# 4:     2        3  12
# 5:     2        4  12
# 6:     2        5  12