我希望通过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天滚动总和?
我有一个非常大的数据框,我的目标是按用户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)
我想让这个计算更快.接下来我该怎么办?