我有一个带有日期列和100列的数据框,其中包含不同位置的值,应该进行预测。我使用来自包tbats()
的{{1}}和forecast()
进行预测,这对第一列(我从数据框中提取)非常有效。
但现在我想在所有列上运行循环。在此循环中,应为每列计算拟合模型(forecast
),然后使用tbats()
计算每列的未来值(均为独立的)(365天)。
我无法弄清楚循环,我尝试了类似的东西:
forecast
或
for(i in names(test)) df <- data.frame(forecast(tbats(ts(test[i],frequency=365)),h=365))
我想要一个数据框,它看起来与原始数据集中的数据框完全相同,但是具有未来日期的预测值。所以列:日期,location_1,location_2,....
我该怎么做这样的循环?
答案 0 :(得分:0)
尝试使用函数apply()
,它将作用于数据框中的所有行。您可能需要删除包含日期的第一列:
apply(df[,-1], 2, function (x) forecast(tbats(ts(x,frequency=365)), h=365))
答案 1 :(得分:0)
如果您需要mean
值列,请尝试:
lst1 <- lapply(dat[,-1], function(x) forecast(tbats(ts(x, frequency=365)), h=365))
resM <- do.call(data.frame, do.call(rbind, lst1)[,"mean"])
dim(resM)
#[1] 365 3
head(resM,2)
# location_1 location_2 location_3
#1 -0.01576029 2.742711 25.04357
#2 -0.02351485 2.722169 25.04353
或者如果您需要fitted values
resF <- do.call(data.frame,do.call(rbind, lst1)[,"fitted"])
dim(resF)
#[1] 455 3
resF1 <- cbind(Date=dat[,1], resF)
resF1[,-1] <- lapply(resF1[,-1], as.numeric)
str(resF1)
#'data.frame': 455 obs. of 4 variables:
#$ Date : Date, format: "2010-10-24" "2010-10-25" ...
#$ location_1: num 0.444 0.337 0.333 0.284 0.225 ...
#$ location_2: num 3.02 3.01 3.04 3.05 3.08 ...
#$ location_3: num 25 25 25 25 25 ...
set.seed(42)
dat <- data.frame(Date=seq(as.Date("2010-10-24"), length.out=455, by=1),
location_1=rnorm(455), location_2=rnorm(455, 3, 15), location_3=rnorm(455, 25))