gpt4 book ai didi

r - 加快大型数据帧的 For 循环

转载 作者:行者123 更新时间:2023-12-02 08:39:28 26 4
gpt4 key购买 nike

我有一个非常大的数据框,我的目标是按用户 ID 列出累计美元。数据框看起来像这样,但它要大得多:

dt<-sample(seq(as.Date("2013-01-01"),as.Date("2013-05-01"),by="days"),10)
s<-c(rep(5252525,5),rep(1313131,5))
usd<-round(rnorm(10,100),2)
money<-data.frame(dt,s,usd)
money<-money[order(money$dt),]
money$Cumulative<-NA
users<-unique(money$s)

我从一个 for 循环开始,但是它很慢:

for (i in 1:length(users)){
temp=which(money$s==users[i])
money$Cumulative[temp]=cumsum(money$usd[temp])
}

我在 StackOverflow 上读到我可以使用 data.table 来提高整体速度,这在一定程度上有所帮助:

money<-data.table(money)
setkey(money,s)

for (i in 1:length(users)){
temp=which(money$s==users[i])
money$Cumulative[temp]=cumsum(money$usd[temp])
}

我想让这个计算更快。接下来我该做什么?

最佳答案

由于 money 已经按 dt 列排序,您可以只使用 ave:

money$Cumulative <- ave(money$usd, money$s, FUN=cumsum)

或者你可以使用data.table:

moneyDT <- as.data.table(money[,1:3])
moneyDT[,cumulative := cumsum(usd), by=s]

关于r - 加快大型数据帧的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17884296/

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