【问题标题】:How to create a new variable that is the sum of a column, by group, in R? [duplicate]如何在R中按组创建一个新变量,它是列的总和? [复制]
【发布时间】:2021-01-04 20:46:08
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 这是many 的骗子,但找到的大多数答案都是汇总数据(减少行数),而不仅仅是向其中添加一列。
  • 谢谢@IceCreamToucan,我知道他们在那里,我只是没时间找到合适的了。

标签: r sum data-cleaning data-wrangling


【解决方案1】:

基础 R

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

(用df$sum &lt;- 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

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 2022-12-06
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多