gpt4 book ai didi

R:按列组聚合数据 - 使用每个观察值对列进行变异

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

我遇到了一个初学者的问题:聚合一类数据的数据,创建一个新列,其中包含每次观察的每个类别数据的总和。

我想要以下数据:

PIN Balance
221 5000
221 2000
221 1000
554 4000
554 4500
643 6000
643 4000

看起来像:

PIN Balance Total
221 5000 8000
221 2000 8000
221 1000 8000
554 4000 8500
554 4500 8500
643 6000 10000
643 4000 10000

我尝试使用聚合:输出 <- 聚合(df$Balance ~ df$PIN, data = df, sum) 但无法将数据返回到我的原始数据集中,因为观察次数为关闭。

最佳答案

您可以使用dplyr来做您想做的事。我们首先 group_by PIN,然后使用 mutate 创建一个新列 Total,它是分组 的总和>余额:

library(dplyr)
res <- df %>% group_by(PIN) %>% mutate(Total=sum(Balance))

将您的数据用作数据框df:

df <- structure(list(PIN = c(221L, 221L, 221L, 554L, 554L, 643L, 643L
), Balance = c(5000L, 2000L, 1000L, 4000L, 4500L, 6000L, 4000L
)), .Names = c("PIN", "Balance"), class = "data.frame", row.names = c(NA,
-7L))
## PIN Balance
##1 221 5000
##2 221 2000
##3 221 1000
##4 554 4000
##5 554 4500
##6 643 6000
##7 643 4000

我们得到了预期的结果:

print(res)
##Source: local data frame [7 x 3]
##Groups: PIN [3]
##
## PIN Balance Total
## <int> <int> <int>
##1 221 5000 8000
##2 221 2000 8000
##3 221 1000 8000
##4 554 4000 8500
##5 554 4500 8500
##6 643 6000 10000
##7 643 4000 10000

或者我们可以使用data.table:

library(data.table)
setDT(df)[,Table:=sum(Balance),by=PIN][]
## PIN Balance Total
##1: 221 5000 8000
##2: 221 2000 8000
##3: 221 1000 8000
##4: 554 4000 8500
##5: 554 4500 8500
##6: 643 6000 10000
##7: 643 4000 10000

关于R:按列组聚合数据 - 使用每个观察值对列进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208340/

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