【发布时间】:2015-09-17 15:59:09
【问题描述】:
使用 R 3.2.2,data.table 1.9.5
价格数据按如下所示的间隔提供。请注意,范围可能不连续,如记录 3 和 4 所示。
id price startdt enddt
1: aa 259 2005-01-01 2005-06-30
2: aa 259 2005-07-01 2005-12-31
3: aa 249 2006-01-01 2006-06-30
4: aa 239 2007-01-01 2007-06-30
销售数据的格式如下。
id dt sls
1: aa 2005-03-01 250
2: aa 2005-08-15 240
3: aa 2005-12-31 300
4: aa 2006-08-01 100
5: aa 2007-04-01 400
我想创建下表。
id dt sls price
1: aa 2005-03-01 250 259
2: aa 2005-08-15 240 259
3: aa 2005-12-31 300 259
4: aa 2006-08-01 100 NA <== since there isn't a price in the price table for this date
5: aa 2007-04-01 400 239
有人可以说明如何做到这一点吗?我假设我需要melt 价格表,以便日期在 1 列中,然后与销售数据进行滚动连接。完整的表有超过 2500 万条记录,用于约 70 万个 sku。
price.dt <- data.table(id=rep("aa",4),price=c(259,259,249,239),
startdt=as.Date(c("2005-1-1","2005-7-1","2006-1-1","2007-1-1"),"%Y-%m-%d"),
enddt=as.Date(c("2005-6-30","2005-12-31","2006-6-30","2007-6-30"),"%Y-%m-%d"))
sales.dt <- data.table(id=rep("aa",5),
dt=as.Date(c("2005-3-1","2005-8-15","2005-12-31","2006-8-1","2007-4-1"),"%Y-%m-%d"),
sls=c(250,240,300,100,400))
final.dt <- data.table(id=rep("aa",5),
dt=as.Date(c("2005-3-1","2005-8-15","2005-12-31","2006-8-1","2007-4-1"),"%Y-%m-%d"),
sls=c(250,240,300,100,400), price=c(259,259,259,NA,239))
【问题讨论】:
标签: r data.table