在data.table

时间:2018-08-30 23:02:48

标签: r data.table lm predict

我的目标是  #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] 

0 个答案:

没有答案