首页 > 解决方案 > 如何在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

谢谢!

标签: rsumdata-cleaningdata-wrangling

解决方案


碱基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

数据表

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

推荐阅读