我正在使用ddply,并且坚持输出的排列方式。这是我正在使用的代码。如您所见,最终输出(timeseries.out)将原始数据和预测数据放在一列中。
data <- data.frame(Product = c(rep("Shampoo",5),rep("Soap",5)),
TSdata = rnorm(10, 1, 10))
tsfun <-function(y){
arima.out <- arima(y$TSdata)
arima.fc <- predict(arima.out, n.ahead=5)
return (data.frame(c(y$TSdata, arima.fc$pred)))
}
library(plyr)
timeseries.out <- ddply(data, .(Product), tsfun)
我真正想要的是一列中的原始数据,以及另一列中填充空白点的预测数据。
data.out <-data.frame(Product = timeseries.out[1:10,1],
Data = c(timeseries.out[1:5,2], rep("NA",5)),
Forecast = c(rep("NA",5),timeseries.out[6:10,2]))
如何更改tsfun的返回值,使其看起来像data.out?我尝试了很多东西,但要么得到错误,要么得到错误的结果。
谢谢!
答案 0 :(得分:1)
通过更改返回值,我能够获得我想要的输出。感谢joran让我思考正确的道路。
简单修改return语句,以便输出两列而不是一列
return (data.frame(y$TSdata, as.numeric(arima.fc$pred)))
修改返回值以适应具有NAs的两列的所需输出
return (data.frame(c(y$TSdata, rep(NA, length(arima.fc$pred))),
c(rep(NA, length(y$TSdata)), arima.fc$pred)))