3
我有一個數據表與日期消費的產品數量。我生成了每種產品的預測,現在想在+1期獲得平均值和80%的上限。問題是預測對象是具有不同結構的列表,具體取決於所使用的方法,所以我無法通過索引檢索值(我可以通過data.table
來命名)。從名單中提取名單與dplyr
這是啞數據和代碼:
# load required libraries
library(data.table)
library(xts)
library(forecast)
library(dplyr)
# create random data
set.seed(1)
a <- data.table(prod = sample(LETTERS[1:5], 20, TRUE), cons = sample(1:50, 20, TRUE), dt = sample(seq(as.Date("2016/06/01"), as.Date("2016/07/27"), by = "day"), 20, FALSE))
# create a time series of purchases
b <- a[, .(C=sum(cons)), by = .(dt, prod)][, x := .(list(xts(x = C, order.by = dt))), by = prod]
b <- b[, .SD[1,], by = prod]
# create a "reference" timeseries
dts <- xts(order.by = seq(as.Date("2016/06/01"), as.Date("2016/07/27"), by = "day"))
# merge reference and calculated timeseries, so zeros appear
b[, x2 := .(list(merge.xts(dts, x[[1]], fill = 0))), by = prod]
# calculate forecast for each extended timeseries
b[, fc := .(list(forecast(x2[[1]]))), by = prod]
現在我想提取的均值和上水平。問題是,意思是有時位於列表中的第2列,有時不是,所以我必須按名稱調用它。在data.table
我做的:
b[, mn := fc[[1]]$mean[1], by = prod]
b[, up := fc[[1]]$upper[1,1], by = prod]
但如果我試圖在dplyr
做的一樣,然後我得到一個閉合差:
b %>% mutate(mnD = .$fc[[1]]$mean[1])
## Error: invalid subscript type 'closure'
b %>% mutate(mnD = fc[[1]]$mean[1])
## Error: invalid subscript type 'closure'
什麼我做錯了,我怎麼能在dplyr
實現這一目標?
沒有必要,只是這樣才能正確打印。沒有它,列表欄會全部打印(而不是)。但很好的提醒 - 我會編輯提到這一點。 –