... либо сплайн- (лучший) или линейно-интерполированный (ОК), либо просто повторные значения (штраф) в течение квартала.Проблема в том, что я не знаю, как преобразовать тип данных, возвращаемый getFin()
и viewFin()
, во что-то пригодное для использования timeSeries
.Вот мой код:
getFin('F')
x <- viewFin(F.f, "BS", period="Q")["Total Common Shares Outstanding",]*1000
Мой желаемый вывод -
> x
GMT x.ts
2011-09-01 3816000
2011-08-01 3816000
2011-07-01 3816000
2011-06-01 3815000
2011-05-01 3815000
2011-04-01 3815000
2011-03-01 3813000
2011-02-01 3813000
2011-01-01 3813000
2010-12-01 3778000
2010-11-01 3778000
2010-10-01 3778000
2010-09-01 3484000
Однако, вот фактический вывод:
> x
2011-09-30 2011-06-30 2011-03-31 2010-12-31 2010-09-30
3816000 3815000 3813000 3778000 3484000
> str(x)
Named num [1:5] 3816000 3815000 3813000 3778000 3484000
- attr(*, "names")= chr [1:5] "2011-09-30" "2011-06-30" "2011-03-31" "2010-12-31" ...
Это похоже на объект xв каком-то странном обратном формате, где ключом является числовое значение, а значением является символьная строка даты.Когда я пытаюсь извлечь даты или числовой компонент, я не могу выделить числовую часть для создания объекта временного ряда.
В идеале, чтобы получить желаемый результат, я мог бы сказать
mydates <- timeSequence(from = "2011-01-01", to=Sys.Date(), by = "month")
series <- timeSeries(x$data, mydates)
Но я не могу извлечь часть числовых данных.
ОБНОВЛЕНИЕ
С здесь и здесь , я адаптировал следующий код:
getFin('F')
x <- viewFin(F.f, "BS", period="Q")["Total Common Shares Outstanding",]*1000
zoox = zoo(x, order.by=as.Date(names(x)))
x2 <- na.spline(merge(zoox, foo=zoo(NA, order.by=seq(start(zoox), end(zoox), "month")))[, 1])
Однако мой вывод немного искажает даты и портит интерполяцию:
>x2
2010-09-30 2010-10-30 2010-11-30 2010-12-30 2010-12-31 2011-01-30 2011-03-02
3484000 3623591 3720509 3776671 3778000 3804738 3813071
2011-03-30 2011-03-31 2011-04-30 2011-05-30 2011-06-30 2011-07-30 2011-08-30
3813025 3813000 3813100 3814116 3815000 3814976 3814884
2011-09-30
3816000
Как видите, у меня есть 12-30 и 12-31, 3 значения дляМарт-2011, но не февраль и т. Д. Как это решить?