Почему я получаю частоту 1 для этих ежемесячных данных временного ряда в R? - PullRequest
0 голосов
/ 12 мая 2019

Я использую R для анализа временных рядов, и у меня есть следующий файл csv, который я загрузил в R:

CSV file:

csv

Я использовал пакет zoo для преобразования моего фрейма данных в ts объект:

library(zoo)
df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon))

Продолжительность:

class(df1_ts)
# [1] "mts"    "ts"     "matrix"`

Однако, когда я запускаю head(df1_ts), я получаю следующие результаты:

head(df1_ts)
# Time Series:
# Start = 2014 
# End = 2018 
# Frequency = 1 
#      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
# 2014 4621 3569 4249 4593 3320 1970 2483 3474 4302 5670 5788 5570
# 2015 5747 4346 5176 5362 5360 3707 3883 5138 5568 6034 5989 5648
# 2016 5821 5164 5781 5346 5339 4743 5417 5514 5880 5899 6014 5641
# 2017 5980 5341 5890 5596 5753 5470 5589 5545 5749 5938 5864 5567
# 2018 5655 5392 5766 5268 5680 5337 5197 5714 5802 5935 5955 5637

Почему я получаю Frequency = 1? Я ожидаю, что Frequency будет 12, поскольку это ежемесячные данные?

Как я могу это исправить?

Я безуспешно пробовал следующее:

df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon), freq=12)

1 Ответ

0 голосов
/ 12 мая 2019

Код, показанный в вопросе, создает многомерный временной ряд, состоящий из 12 рядов (по одному на каждый столбец месяца), временным индексом которого является год; однако, то, что требуется, - это один одномерный месячный ряд.

Используя df1, который воспроизводимо показан в конце заметки, сначала преобразуйте data.frame df1 в матрицу, используя transpose, а затем распутайте эту транспонированную матрицу столбец за столбцом в один вектор, используя c. Теперь мы можем определить серию ts напрямую:

tt <- ts(c(t(df1[-1])), start = df1$Year[1], freq = 12)

дает:

frequency(tt)
## [1] 12
tt
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014   1   2   3   4   5   6   7   8   9  10  11  12
## 2015  13  14  15  16  17  18  19  20  21  22  23  24
## 2016  25  26  27  28  29  30  31  32  33  34  35  36
## 2017  37  38  39  40  41  42  43  44  45  46  47  48
## 2018  49  50  51  52  53  54  55  56  57  58  59  60

Примечание

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

df1 <- as.data.frame(cbind(2014:2018, matrix(1:60, ncol = 12, byrow = TRUE)))
names(df1) <- c("Year", month.abb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...