我的目标是 #1通过ItemNumber预测第15位和第16位的销售额,并使用以下数据进行存储。 #2将该预测显示为该数据中的列或该数据的子集,因此我可以查看一行并查看预测旁边的预测变量 每天。
Data.table是我最满意的。如果可能的话,我想用它来实现自己的目标。
下面的DT是两个零售商店位置中两个商品的历史销售额表,以及影响到7月14日销售额的变量。 DT中包含7月15日和16日的两个“未来日”,以及一些会影响当日销售的已知变量。
https://stackoverflow.com/questions/23947245/use-predict-on-data-table-with-linear-regression
使用以上信息以及用户42的建议,我可以深入到下一行。 D1是历史上的UnitSales,D2是我要预测其未来的日子。
resultsofpredict=D1[,predict.lm(lm(UnitSales~.,.SD,na.action = na.exclude),D2[.BY]),by=c("ItemNumber","Store"),.SDcols=testcols]
现在,如何正确地将预测结果与D2合并或合并,以便可以在同一行(D2列的预测V1)上一起看到预测,日期和所有预测变量?这是不起作用的尝试,当我只想要8时最终以16行结束。有人可以使用我的数据发布示例,以便我可以直观地看到它吗?
combinedresult=merge(D2,resultsofpredict )
combinedresult=merge(resultsofpredict,D2)
谢谢。
library(data.table)
library(lubridate)
zz="
Store Date ItemNumber RetailPrice Backstock UnitSales typea typeb typec Sunday Monday Tuesday Wednesday Friday Saturday
1 7/8/2018 500 1.2 5 20 0 1 0 1 0 0 0 0 0
1 7/9/2018 500 1.2 9 10 0 1 0 0 1 0 0 0 0
1 7/10/2018 500 0.8 0 10 1 0 0 0 0 1 0 0 0
1 7/11/2018 500 0.8 0 8 1 0 0 0 0 0 1 0 0
1 7/12/2018 500 0.8 0 7 1 0 0 0 0 0 0 0 0
1 7/13/2018 500 1.2 3 18 0 1 0 0 0 0 0 1 0
1 7/14/2018 500 1.2 0 21 0 1 0 0 0 0 0 0 1
1 7/15/2018 500 1.2 3 99 0 1 0 1 0 0 0 0 0
1 7/16/2018 500 0.8 0 99 1 0 0 0 1 0 0 0 0
1 7/8/2018 600 1.2 0 18 0 1 0 1 0 0 0 0 0
1 7/9/2018 600 1.2 0 11 0 1 0 0 1 0 0 0 0
1 7/10/2018 600 0.8 0 12 1 0 0 0 0 1 0 0 0
1 7/11/2018 600 0.8 0 4 1 0 0 0 0 0 1 0 0
1 7/12/2018 600 0.8 0 5 1 0 0 0 0 0 0 0 0
1 7/13/2018 600 1.2 0 13 0 1 0 0 0 0 0 1 0
1 7/14/2018 600 1.2 0 29 0 1 0 0 0 0 0 0 1
1 7/15/2018 600 1.2 2 99 0 1 0 1 0 0 0 0 0
1 7/16/2018 600 0.8 0 99 1 0 0 0 1 0 0 0 0
2 7/8/2018 500 1.2 0 10 0 1 0 1 0 0 0 0 0
2 7/9/2018 500 1.2 0 6 0 1 0 0 1 0 0 0 0
2 7/10/2018 500 0.8 0 5 1 0 0 0 0 1 0 0 0
2 7/11/2018 500 0.8 0 5 1 0 0 0 0 0 1 0 0
2 7/12/2018 500 0.8 3 5 1 0 0 0 0 0 0 0 0
2 7/13/2018 500 1.2 3 12 0 1 0 0 0 0 0 1 0
2 7/14/2018 500 1.2 9 14 0 1 0 0 0 0 0 0 1
2 7/15/2018 500 1.2 3 99 0 1 0 1 0 0 0 0 0
2 7/16/2018 500 0.8 0 99 1 0 0 0 1 0 0 0 0
2 7/8/2018 600 1.2 0 14 0 1 0 1 0 0 0 0 0
2 7/9/2018 600 1.2 0 11 0 1 0 0 1 0 0 0 0
2 7/10/2018 600 0.8 0 7 1 0 0 0 0 1 0 0 0
2 7/11/2018 600 0.8 0 3 1 0 0 0 0 0 1 0 0
2 7/12/2018 600 0.8 0 5 1 0 0 0 0 0 0 0 0
2 7/13/2018 600 1.2 0 12 0 1 0 0 0 0 0 1 0
2 7/14/2018 600 1.2 0 17 0 1 0 0 0 0 0 0 1
2 7/15/2018 600 1.2 0 99 0 1 0 1 0 0 0 0 0
2 7/16/2018 600 0.8 0 99 1 0 0 0 1 0 0 0 0
"
加载并准备数据
DT=as.data.table(read.table(text=zz,fill=TRUE,header=TRUE))
setkey(DT,ItemNumber,Store)
我仅使用99作为表中的占位符来加载示例。在这里删除它。
DT[UnitSales==99,UnitSales:=(value=NA_integer_)]
DT = DT[, Date:= as.Date(Date, "%m/%d/%Y")]
用于预测UnitSales的变量。实际数据中有许多我想保留的列,但这些列并不能帮助预测UnitSales,因此这些是我将用来预测的列子集的名称。
testcols=c('RetailPrice','Saturday','Sunday','Tuesday')
将DT分为历史记录和新数据
d="07/14/2018"
d=as.Date(d,"%m/%d/%Y")
历史销售
D1=DT[Date < d+1]
“未来”的日子来预测UnitSales的销售情况
D2=DT[Date> d]
表显示了D1的系数
coeftable=D1[ , as.list(coef(lm(UnitSales~.,.SD,na.action = NULL))) ,
by= c("ItemNumber","Store"),.SDcols=testcols]