У меня есть фрейм данных, содержащий временной ряд ежемесячных данных с некоторыми пропущенными значениями.
dates <- seq(
as.Date("2010-01-01"), as.Date("2017-12-01"), "1 month"
)
n_dates <- length(dates)
dates <- dates[runif(n_dates) < 0.5]
time_data <- data.frame(
date = dates,
value = rnorm(length(dates))
)
## date value
## 1 2010-02-01 1.3625419
## 2 2010-06-01 0.1512481
## etc.
Для того, чтобы можно было использовать функцию прогнозирования временных рядов, например, forecast
Я хотел бы преобразовать это в ts
объект.
Глупый способ сделать это состоит в том, чтобы создать регулярный набор ежемесячных дат в течение всего периода времени, а затем снова присоединиться к исходным данным..
library(dplyr)
first_date <- min(time_data$date)
last_date <- max(time_data$date)
full_dates <- data.frame(
date = seq(first_date, last_date, "1 month")
)
extended_time_data <- left_join(full_dates, time_data, by = "date")
## date value
## 1 2010-02-01 1.3625419
## 2 2010-03-01 NA
## etc.
Теперь я могу создавать временные ряды, используя ts()
.
library(lubridate)
time_series <- ts(
extended_time_data$value,
start = c(year(first_date), month(first_date)),
frequency = 12
)
Для такой простой задачи это многословно и довольно грубо.
Я также посмотрел на первое преобразование в xts
и использование конвертора из пакета timetk
, но ничто не выскочило на меня как более легкий путь.
Этот вопрос является обманом Как создать временной ряд с пропущенными значениями даты и времени , но ответ там был еще более размытым.
Как создать объект ts
из временного ряда с пропущенными значениями?