使用R中的数据表计算两个日期之间的累计和
我有一个使用R中的数据表计算两个日期之间的累计和,r,date,data.table,cumulative-sum,R,Date,Data.table,Cumulative Sum,我有一个数据表,形状如下: date_from date_until value 2015-01-01 2015-01-03 100 2015-01-02 2015-01-05 50 2015-01-02 2015-01-04 10 ... 我想做的是:我想计算一年中每个日期的累计总和。对于第一行,值100与2015-01-01至2015-01-03期间的每天相关。我想添加与特定日期相关的所有值 因此,最终会有一个data.table如下所
数据表
,形状如下:
date_from date_until value
2015-01-01 2015-01-03 100
2015-01-02 2015-01-05 50
2015-01-02 2015-01-04 10
...
我想做的是:我想计算一年中每个日期的累计总和。对于第一行,值100与2015-01-01至2015-01-03期间的每天相关。我想添加与特定日期相关的所有值
因此,最终会有一个data.table
如下所示:
date value
2015-01-01 100
2015-01-02 160
2015-01-03 160
2015-01-04 60
2015-01-05 50
使用数据表有什么简单的方法可以做到这一点吗
dt[, .(date = seq(as.Date(date_from, '%Y-%m-%d'),
as.Date(date_until, '%Y-%m-%d'),
by='1 day'),
value), by = 1:nrow(dt)][, sum(value), by = date]
# date V1
#1: 2015-01-01 100
#2: 2015-01-02 160
#3: 2015-01-03 160
#4: 2015-01-04 60
#5: 2015-01-05 50
另一个选项使用foverlaps
:
# convert to Date for ease
dt[, date_from := as.Date(date_from, '%Y-%m-%d')]
dt[, date_until := as.Date(date_until, '%Y-%m-%d')]
# all of the dates
alldates = dt[, do.call(seq, c(as.list(range(c(date_from, date_until))), by = '1 day'))]
# foverlaps to find the intersections
foverlaps(dt, data.table(date_from = alldates, date_until = alldates,
key = c('date_from', 'date_until')))[,
sum(value), by = date_from]
# date_from V1
#1: 2015-01-01 100
#2: 2015-01-02 160
#3: 2015-01-03 160
#4: 2015-01-04 60
#5: 2015-01-05 50
另一个选项使用foverlaps
:
# convert to Date for ease
dt[, date_from := as.Date(date_from, '%Y-%m-%d')]
dt[, date_until := as.Date(date_until, '%Y-%m-%d')]
# all of the dates
alldates = dt[, do.call(seq, c(as.list(range(c(date_from, date_until))), by = '1 day'))]
# foverlaps to find the intersections
foverlaps(dt, data.table(date_from = alldates, date_until = alldates,
key = c('date_from', 'date_until')))[,
sum(value), by = date_from]
# date_from V1
#1: 2015-01-01 100
#2: 2015-01-02 160
#3: 2015-01-03 160
#4: 2015-01-04 60
#5: 2015-01-05 50
date\u-until
总是一样的吗?不,有几个不同的时间跨度。那么你应该让你的例子更能代表真实数据。我认为foverlaps
在这里可能有用。date\u-until
总是一样的吗?不,有几个不同的时间跨度。那么你应该让你的例子更能代表真实数据。我认为foverlaps
在这里可能有用。。