R - автоматически разбивать временные ряды на равные части - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь сделать режим регрессии с периодами калибровки. Для этого я хочу разделить свой временной ряд на 4 равные части.

library(lubridate)
date_list = seq(ymd('2000-12-01'),ymd('2018-01-28'),by='day')
date_list = date_list[which(month(date_list) %in% c(12,1,2))] 

testframe = as.data.frame(date_list)
testframe$values = seq (1, 120, length = nrow(testframe))

Приведенный выше тестовый кадр длится 18 сезонов, и я хочу разделить его на 4 части, что означает 2 Периода 4 зимних сезонов и 2 Периода 5 зимних сезонов.

Моя попытка была:

library(lubridate)
aj = year(testframe[1,1])
ej = year(testframe[nrow(testframe),1])

diff = ej - aj

Но когда я делю diff сейчас с 4, его 4,5, но мне нужно что-то вроде 4,4,5,5 и использовать это для извлечениявремена года. Есть идеи, как сделать это автоматически?

1 Ответ

1 голос
/ 04 октября 2019

Вы можете начать с чего-то вроде этого:

library(lubridate)
testframe$year_ <- year(testframe$date_list)
testframe$season <- getSeason(testframe$date_list)

Если вам интересно происхождение функции getSeason(), прочитайте this . Теперь вы можете разделить наборы данных по сезонам:

by4_1 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[1:4],] 
by4_2 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[5:8],]
by5_1 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[9:13],]
by5_2 <- testframe[testframe$year_ %in% as.data.frame(table(testframe$year_))$Var1[14:18],]

Теперь вы можете проверить это, например:

table(by4_1$year_, by4_1$season)    
       Fall Winter
  2000   14     17
  2001   14     76
  2002   14     76
  2003   14     76
...