2013-01-04 43 views
3

我正在使用ddply,並與輸出的排列方式卡在一起。這是我正在使用的代碼。如您所見,最終輸出(timeseries.out)在一列中具有原始數據和預測數據。使用ddply時分割列

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) 

我真正想要的是一列中的原始數據,另一列中的預測數據用NAs填充空白點。

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?我已經嘗試了一些東西,但要麼得到錯誤,要麼得到錯誤的結果。

謝謝!

+1

不要使用'C( )'data.frame()'裏面。 – joran

+1

我曾嘗試過,並得到一個錯誤,沒有意識到錯誤是從arimd.fc $ pred的輸出,而不是缺少的c()。我刪除了c(),並用as.numeric(arima.fc $ pred)代替。謝謝! – obug

+2

請把它寫成答案,以便你可以接受它! – joran

回答

1

通過改變返回值我能夠得到我想要的輸出。感謝喬蘭讓我思考正確的道路。

return語句的簡單的修改使兩列是輸出,而不是修改,以適應兩列所需的輸出爲NAS一個

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

返回值

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

+1爲答案!請檢查您接受的答案。 – agstudy