Как превратить список фреймов данных в объекты временных рядов, которые я могу использовать с сезонным пакетом x-13? - PullRequest
0 голосов
/ 31 марта 2020

Я прочитал во множестве серий, что мне нужно запустить x-13, используя следующее:

sheet_names <- excel_sheets(path)

read_excel_sheet <- function(sheet_name, path) {
  x <- read_excel(path = path, sheet = sheet_name)
}

Data <- lapply(sheet_names, read_excel_sheet, path = path)

str(Data)

Это возвращает следующий вывод:

List of 4
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   134 obs. of  80 variables:

Итак, я знаю, что я правильно читаю данные в списки. Затем я пытаюсь эту команду, чтобы превратить этот список фреймов данных во временные ряды:

Timeseries <- lapply(data, function(t) ts(t, start=c(2009, 1), end=c(2020, 2),frequency=12))

Это возвращает следующую ошибку

Error in rep_len(data, nobs) : attempt to replicate non-vector 

Кто-нибудь знает, как превратить этот список данных кадры в список объектов временных рядов, которые я могу пройти через сезонный пакет?

1 Ответ

1 голос
/ 31 марта 2020

Я не уверен, хотите ли вы преобразовать каждый data.frame в списке в отдельный ts объект или хотите связать их все вместе.

  1. Независимо ts объектов в списке

Просто используйте lapply() для преобразования data.frame в нужный класс:

listofdf = list( A = data.frame( time = 1:10, y = rnorm(n_obs)),
                 B = data.frame( time = 11:20, y = rnorm(n_obs)),
                 C = data.frame( time = 21:30, y = rnorm(n_obs)) 
                 )

listofts = lapply( listofdf, as.ts )
Свяжите их вместе

Если вы хотите иметь уникальный объект ts, я бы порекомендовал вам использовать отличные данные . таблица пакет.

library(data.table)
listofdf = list( A = data.frame( time = 1:10, y = rnorm(n_obs)),
                 B = data.frame( time = 11:20, y = rnorm(n_obs)),
                 C = data.frame( time = 21:30, y = rnorm(n_obs)) 
                 )

listofdt = lapply( listofdf, setDT )
dt = rbindlist( listofdt )
final_ts = as.ts( dt )

Осторожно, что вам нужно установить пакет с обычным install.packages("data.table").

...