Как заполнить функцию «Даты в ts ()», если отсутствуют данные за много месяцев на протяжении более 2 лет? - PullRequest
1 голос
/ 08 апреля 2019

Вот данные:

e <- data.frame( date = c("2016-03-08", "2016-05-19" ,"2016-05-19" ,"2016-09-02" ,"2016-09-02", "2016-11-23", "2016-12-29","2017-02-08" ,"2017-07-24", "2017-07-26" ,"2018-04-05" ,"2018-06-01", "2019-02-07" ,"2019-03-25"), price = c(1300, 1300, 1300 ,1300 ,1300 ,1300 ,1300 ,1300 ,1300 ,1300 ,1375 ,1375 ,1405 ,1405))

summary(e)

enter image description here

Когда я использую ts (), я не уверен, почему значения меняются. Может кто-нибудь объяснить?

b <- ts(e$price, start = c(2016,3), end = c(2019,3), frequency = 12)

Вывод: март 2013 имеет правильную цену 1300 , но март 2019 имеет неправильное значение, 1300 вместо 1405

enter image description here

Как это исправить?

1 Ответ

0 голосов
/ 09 апреля 2019

Ваши данные не представляют собой временной ряд, поскольку математически временной ряд представляет собой функцию от уникального времени до значений. Также ts плохо обрабатывает ежедневные данные.

Если мы опускаем все, кроме последней точки данных в любом году / месяце, то мы можем преобразовать ее в ежемесячную серию ts, считая ее в серию зоопарка и тем самым преобразовав столбец даты в класс yearmon и агрегирование по идентичным годам / месяцам с использованием последнего значения. Затем преобразуйте это в ts класс.

library(zoo)

z <- read.zoo(e, FUN = as.yearmon, aggregate = function(x) tail(x, 1))
as.ts(z)

дает:

      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2016           1300   NA 1300   NA   NA   NA 1300   NA 1300 1300
2017   NA 1300   NA   NA   NA   NA 1300   NA   NA   NA   NA   NA
2018   NA   NA   NA 1375   NA 1375   NA   NA   NA   NA   NA   NA
2019   NA 1405 1405
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...