Я хочу преобразовать tbl_df в ts для анализа временных рядов. Я сделал это, но потерял мой (Месяц) столбец, который является датой в моих данных - PullRequest
1 голос
/ 23 февраля 2020

Я пытаюсь преобразовать свой набор данных tbl_df во временные ряды (ts) , чтобы выполнить прогнозную модель ARIMA. Это первые 5 строк моего исходного набора данных:

   Month      count
   <date>     <int>
 1 2016-01-01   431
 2 2016-02-01   478
 3 2016-03-01   468
 4 2016-04-01   488
 5 2016-05-01   445

После успешного преобразования я потерял столбец Месяц и получил странную дату. Я использовал следующий код для преобразования в ts:

 crime_monthly1 <- as.ts(crime_monthly)

Я получил это с изменениями месяца Col в странные числа;

   Month count
 1 16801   431
 2 16832   478
 3 16861   468
 4 16892   488
 5 16922   445

Я применил этот код для преобразования даты и весь набор данных в ts, но не смог помочь;

crime_monthly1$Month <- as.Date(crime_monthly1$Month, format = "%m/%d/%Y")
ts(crime_monthly1[,-1], start = as.Date(crime_monthly1$Month[1]), frequency = 1)

Я получил следующую ошибку;

Error in crime_monthly1$Month : $ operator is invalid for atomic vectors

Другая проблема заключается в том, что я получаю Частота всего 1 . Хотя мой набор данных имеет временное временное разрешение с 36 месяцами, которое, я думаю, должно быть 12, поскольку через 1 год 12 месяцев.

Может кто-нибудь сказать, пожалуйста, полную процедуру для этого. Мне очень жаль, но я новичок в R, и я также искал предыдущие вопросы, но не смог найти точное решение в моем случае.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

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

library(zoo)

z <- read.zoo(DF, FUN = as.yearmon)
tt <- as.ts(z)

tt
##      Jan Feb Mar Apr May
## 2016 431 478 468 488 445

frequency(tt)
## [1] 12

class(tt)
## [1] "ts"

Примечание

Предполагается, что вход в воспроизводимой форме:

Lines <- "   Month      count
 1 2016-01-01   431
 2 2016-02-01   478
 3 2016-03-01   468
 4 2016-04-01   488
 5 2016-05-01   445"
DF <- read.table(text = Lines)
1 голос
/ 23 февраля 2020

Простейший подход заключается в следующем.

crime_ts <- ts(crime_monthly$count, start=2016, frequency=12)

Но вам может быть лучше использовать объект tsibble, чем объект ts.

library(tidyverse)
library(tsibble)

crime_monthly <- tribble(
    ~Month,      ~count,
    "2016-01-01",  431,
    "2016-02-01",  478,
    "2016-03-01",  468,
    "2016-04-01",  488,
    "2016-05-01",  445) %>%
  mutate(Month = as.Date(Month))

crime_tsibble <- as_tsibble(crime_monthly, index=Month) %>%
  mutate(
    Month = yearmonth(Month)
  )
crime_tsibble
#> # A tsibble: 5 x 2 [1M]
#>      Month count
#>      <mth> <dbl>
#> 1 2016 Jan   431
#> 2 2016 Feb   478
#> 3 2016 Mar   468
#> 4 2016 Apr   488
#> 5 2016 May   445

Создано в 2020-02-23 пакетом Представления (v0.3.0)

Инструменты для использования объектов tsibble есть в tsibble, feasts и fable пакеты.

...