Конвертировать ts во фрейм данных
У меня есть это тс:
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2015.173 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.192 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.212 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.231 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.250 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.269 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.288 1.657143 0.06698996 3.247296 -0.7747861 4.089072
2015.308 1.657143 0.06698996 3.247296 -0.7747861 4.089072
Как я могу преобразовать это в TS, я использую:
fct <- data.frame(date=as.Date(index(fca)), Y = melt(fca))
Но я получаю эту ошибку:
Ошибка в data.frame(date = as.Date(index(fca)), Y = melt(fca)):
аргументы подразумевают различное количество строк: 10, 16
Кто-то знает, как это исправить?
1 ответ
forecast
Вывод выглядит только как фрейм данных, когда вы его печатаете. Но если вы посмотрите на структуру с str(fca)
, вы увидите грязные кишки объекта.
Что вы видите, когда звоните print(fca)
является специально разработанным выходом в качестве наглядного пособия ТОЛЬКО. Это не означает, что основной объект - это матричный массив.
Решение состоит в том, чтобы извлечь нужные вам части и создать из них фрейм данных.
library(forecast)
fit <- Arima(WWWusage,c(3,1,0))
fca <- forecast(fit)
cbind.data.frame(Point=fca$mean, Lower=fca$lower, Upper=fca$upper)
# Point Lower.80% Lower.95% Upper.80% Upper.95%
# 1 0.005151116 -1.271415 -1.947189 1.281718 1.957491
# 2 -0.170997839 -1.716453 -2.534568 1.374457 2.192572
# 3 -0.205288123 -1.782216 -2.616991 1.371640 2.206415
# 4 -0.221099340 -1.812749 -2.655317 1.370550 2.213119
# 5 -0.229741679 -1.830356 -2.677670 1.370872 2.218186
# 6 -0.234764205 -1.841557 -2.692142 1.372029 2.222614
# 7 -0.237705586 -1.849083 -2.702094 1.373671 2.226683
# 8 -0.239354235 -1.854302 -2.709204 1.375594 2.230495
# 9 -0.240158452 -1.857987 -2.714414 1.377670 2.234097
# 10 -0.240391964 -1.860607 -2.718298 1.379824 2.237514
редактировать
Даты очень хорошо спрятаны в данных. Я не нашел точный вектор даты. Я считаю, что это генерируется tsp
атрибут, указывающий начало, конец и длину:
dates <- attr(fca$mean, "tsp")
datecol <- seq(from=dates[1], to=dates[2], by=dates[3])