4
Usage <- structure(list(feature = c("M11", "M11", "M11", "M11", "M11", "M11", "M11"),
startDate = structure(c(17130, 17130, 17130, 17130,17155, 17155, 17155), class = "Date"),
cc = c("X6", "X6", "X6", "X6", "X6", "X6", "X6"), vendor = c("Z1", "Z1", "Z1", "Z1", "Z1","Z1", "Z1")), .Names = c("feature", "startDate", "cc", "vendor"),
row.names = c(NA,-7L), class = c("data.table", "data.frame"))
Limits <- structure(list(vendorId = c("Z1", "Z1", "Z1", "Z1", "Z1", "Z1"),
featureId = c("M11", "M11", "M11", "M11", "M11", "M11"),
costcenter = c("X6", "X6", "X6", "X6", "X6", "X6"),
oldLimit = c(1L,2L, 3L, 4L, 5L, 6L), date = structure(c(17135, 17105, 17074, 17044, 17149, 17119), class = "Date")),
.Names = c("vendorId", "featureId","costcenter", "oldLimit", "date"), row.names = c(NA, -6L), class = "data.frame")
setDT(Usage)
setDT(Limits)
荫试图通过看“限制” DT列“限制” DT添加到“用法”。这是为了找出在其相应使用时该“功能”,“成本中心”,“供应商”组合的限制。
但是,当我尝试使用下面的代码进行roll-join时,我得到了奇怪的结果。我为我的数据获得了大量的NAs,因此如上创建了示例数据。以下是我的roll-join代码。
Usage[Limits, limitAtStartDate:= i.oldLimit, on=c(cc="costcenter",feature="featureId",
vendor="vendorId", startDate="date"), roll=T,verbose=T]
> Usage
feature startDate cc vendor limitAtStartDate
1: M11 2016-11-25 X6 Z1 6
2: M11 2016-11-25 X6 Z1 NA
3: M11 2016-11-25 X6 Z1 NA
4: M11 2016-11-25 X6 Z1 NA
5: M11 2016-12-20 X6 Z1 5
6: M11 2016-12-20 X6 Z1 NA
7: M11 2016-12-20 X6 Z1 NA
为什么是“5” &“6”是为一个记录“limitAtStartDate”?
我期待着5对所有行与日期2016年12月20日和6只全部设置2016年11月25日。请让我知道我要多多错了。我现在用data.table版本1.10.0。
我想你是这样做的。尝试'限制[usage,oldLimit,on =。(costcenter = cc,featureId = feature,vendorId = vendor,date = startDate),roll = TRUE]'另外,请不要忘记'setDT(Usage); setDT(限制)' –
@DavidArenburg感谢你。用适当的setDT()更新问题和结果。但我不想加入其他方式,因为之后我不会得到正确的DT结构。 – pauljeba
我给你你需要的价值。你可以把它们放回'Usage'表中。例如。 'Usage [,limitAtStartDate:=限制[usage,oldLimit,on =。(costcenter = cc,featureId = feature,vendorId = vendor,date = startDate),roll = TRUE]] –