【问题标题】:Splitting columns when using ddply使用 ddply 时拆分列
【发布时间】:2012-12-19 06:56:46
【问题描述】:

我正在使用 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)

我真正想要的是一列中的原始数据,以及另一列中的预测数据,其中 NA 填充空白点。

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?我尝试了很多方法,但要么得到错误,要么得到错误的结果。

谢谢!

【问题讨论】:

  • 不要在data.frame() 中使用c()
  • 我之前尝试过并得到了一个错误,没有意识到错误来自 arimd.fc$pred 的输出,而不是缺少的 c()。我删除了 c() 并改用 as.numeric(arima.fc$pred) 。谢谢!
  • 请把它写下来作为答案,以便您接受...!
  • 我现在正在更改代码并将其发布为答案。
  • 由于我的低代表(新用户),我无法再发布 7 个小时的答案。届时将这样做。

标签: r plyr


【解决方案1】:

通过更改返回值,我能够得到我想要的输出。感谢 joran 让我走上了正确的道路。

对 return 语句的简单修改,因此输出两列而不是一列

return (data.frame(y$TSdata, as.numeric(arima.fc$pred)))

修改返回值以适应具有 NA 的两列的所需输出

return (data.frame(c(y$TSdata, rep(NA, length(arima.fc$pred))),
                   c(rep(NA, length(y$TSdata)), arima.fc$pred)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2014-12-13
    • 2012-12-04
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多