R//根据日期范围求和
假设我有一个如下的数据框(仅前3列),其中sum是例如客户用户在日期当天产生的收入:R//根据日期范围求和,r,sum,dataframe,R,Sum,Dataframe,假设我有一个如下的数据框(仅前3列),其中sum是例如客户用户在日期当天产生的收入: user date sum sum(previous5days) A 2013-01-01 10 0 A 2013-01-02 20 10 A 2013-01-03 10 30 A 2013-01-05 5 40 A 2013-01-06 6 45 A 2013-01-08 7 21 A 2013-01-09 4 22 A 2013
user date sum sum(previous5days)
A 2013-01-01 10 0
A 2013-01-02 20 10
A 2013-01-03 10 30
A 2013-01-05 5 40
A 2013-01-06 6 45
A 2013-01-08 7 21
A 2013-01-09 4 22
A 2013-01-10 0 22
B 2013-01-06 1 0
B 2013-01-07 1 1
现在我想计算第4列[总和(以前的5天)],这是客户用户在特定日期的前5天(不包括实际日期)内的总收入。必须对每行进行此计算
我如何在不使用循环的情况下做到这一点,因为数据量相当大,循环不是一个选项
非常感谢 使用
data.table
您可以检索键:
library(data.table)
DT <- data.table(<yourdata>)
setkey(DT, user, date)
DT[, sumSum := DT[ .(.BY[[1]], .d+(-5:-1) )][, sum(sum, na.rm=TRUE)] , by=list(user, .d=date)]
DT
# user date sum sum.previous5days. sumSum
# 1: A 2013-01-01 10 0 0
# 2: A 2013-01-02 20 10 10
# 3: A 2013-01-03 10 30 30
# 4: A 2013-01-05 5 40 40
# 5: A 2013-01-06 6 45 45
# 6: A 2013-01-08 7 21 21
# 7: A 2013-01-09 4 22 18 <~~~ Discrepency
# 8: A 2013-01-10 0 22 22
# 9: B 2013-01-06 1 0 0
# 10: B 2013-01-07 1 1 1
库(data.table)
DT使用数据。表
您可以检索键:
library(data.table)
DT <- data.table(<yourdata>)
setkey(DT, user, date)
DT[, sumSum := DT[ .(.BY[[1]], .d+(-5:-1) )][, sum(sum, na.rm=TRUE)] , by=list(user, .d=date)]
DT
# user date sum sum.previous5days. sumSum
# 1: A 2013-01-01 10 0 0
# 2: A 2013-01-02 20 10 10
# 3: A 2013-01-03 10 30 30
# 4: A 2013-01-05 5 40 40
# 5: A 2013-01-06 6 45 45
# 6: A 2013-01-08 7 21 21
# 7: A 2013-01-09 4 22 18 <~~~ Discrepency
# 8: A 2013-01-10 0 22 22
# 9: B 2013-01-06 1 0 0
# 10: B 2013-01-07 1 1 1
库(data.table)
DT查看rollsum
和zoo
中的其他roll*
函数。查看rollsum
和zoo
中的其他roll*
函数。非常感谢!如果日期为POSIXlt格式,并且我希望聚合前5秒/分钟/小时的事务,我将如何调整您的脚本?将列(或添加新列)转换为as.ITime
。然后按秒数移动。(即+5*60
分钟,+5*60*60
5小时)非常好用,非常感谢!如果日期为POSIXlt格式,并且我希望聚合前5秒/分钟/小时的事务,我将如何调整您的脚本?将列(或添加新列)转换为as.ITime
。然后按秒数移动。(即分钟为+5*60
,5小时为+5*60*60
)