gpt4 book ai didi

r - R中按组对变量求和

转载 作者:行者123 更新时间:2023-12-04 04:56:25 24 4
gpt4 key购买 nike

我有一个数据框,我想创建一个新列,该列给出按因子分组的数字变量的总和。所以像这样:

之前:

data1 <- data.frame(month = c(1, 1, 2, 2, 3, 3), 
sex = c("m", "f", "m", "f", "m", "f"),
value = c(10, 20, 30, 40, 50, 60))

之后:
data2 <- data.frame(month = c(1, 1, 2, 2, 3, 3), 
sex = c("m", "f", "m", "f", "m", "f"),
value = c(10, 20, 30, 40, 50, 60),
sum = c(30, 30, 70, 70, 110, 110))

在 Stata 中,您可以使用 egen 来做到这一点。命令很容易。我已经尝试了聚合函数和 ddply 函数,但它们创建了全新的数据框,我只想向现有数据框添加一列。

最佳答案

您正在寻找 ave

> data2 <- transform(data1, sum=ave(value, month, FUN=sum))
month sex value sum
1 1 m 10 30
2 1 f 20 30
3 2 m 30 70
4 2 f 40 70
5 3 m 50 110
6 3 f 60 110
data1$sum <- ave(data1$value, data1$month, FUN=sum)如果您不想使用 transform 很有用

还有 data.table很有帮助
library(data.table)
DT <- data.table(data1)
DT[, sum:=sum(value), by=month]

更新

我们也可以使用 tidyverse方法简单而优雅:
> library(tidyverse)
> data1 %>%
group_by(month) %>%
mutate(sum=sum(value))
# A tibble: 6 x 4
# Groups: month [3]
month sex value sum
<dbl> <fct> <dbl> <dbl>
1 1 m 10 30
2 1 f 20 30
3 2 m 30 70
4 2 f 40 70
5 3 m 50 110
6 3 f 60 110

关于r - R中按组对变量求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com