小编jgr*_*nb1的帖子

R中另一个变量的滚动和

我希望通过ID获得7天的滚动金额.假设我的数据如下所示:

data<-as.data.frame(matrix(NA,42,3))
data$V1<-seq(as.Date("2014-05-01"),as.Date("2014-09-01"),by=3)
data$V2<-rep(1:6,7)
data$V3<-rep(c(1,2),21)
colnames(data)<-c("Date","USD","ID")

         Date USD ID
1  2014-05-01   1  1
2  2014-05-04   2  2
3  2014-05-07   3  1
4  2014-05-10   4  2
5  2014-05-13   5  1
6  2014-05-16   6  2
7  2014-05-19   1  1
8  2014-05-22   2  2
9  2014-05-25   3  1
10 2014-05-28   4  2
Run Code Online (Sandbox Code Playgroud)

如何添加一个新列,其中包含按ID划分的7天滚动总和?

r xts data.table

9
推荐指数
3
解决办法
4386
查看次数

加速For large for large dataframe

我有一个非常大的数据框,我的目标是按用户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)
Run Code Online (Sandbox Code Playgroud)

我开始使用for循环,但速度非常慢:

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

我在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])
}
Run Code Online (Sandbox Code Playgroud)

我想让这个计算更快.接下来我该怎么办?

performance for-loop r data.table

2
推荐指数
1
解决办法
136
查看次数

标签 统计

data.table ×2

r ×2

for-loop ×1

performance ×1

xts ×1