2016-12-26 2 views
1

J'ai une simple série chronologique binaire, qui indique si les États-Unis sont en récession ou non (https://fred.stlouisfed.org/series/USRECM) et je veux l'ajouter comme une zone ombrée dans un dygraph. Cependant, les dygraphes n'enregistrent qu'une liste (voir link et ci-dessous). J'ai donc besoin d'un moyen simple et rapide de créer une liste de chaque période de récession, qui est marquée par un 1.Créer une liste à partir de séries temporelles binaires

moi une fonction d'écriture qui regarde les valeurs actuelles et décalées.

recession_periods <- list(
    list(from = "1920-1-1", to = "1930-1-1"), 
    list(from = "1940-1-1", to = "1950-1-1"), 
    list(from = "1960-1-1", to = "1970-1-1") 
) 

Répondre

1

Oui, avec les 'suivants' function pour les dates et le paquet lubridate. Par exemple, cela va créer une séquence de dates séparées par 10 ans.

library(data.table) 
library(lubridate) 

elements <- data.table(from = seq(from = as.Date('1920-01-01'), to = as.Date('1990-01-01'),by = "10 year")) 
# Add the space in years between dates 
elements[, to := from + years(10)] 
finalList <- setNames(split(elements, seq(nrow(elements))), rownames(elements)) 

Cela va créer quelque chose comme ceci:

$`1` 
     from   to 
1: 1920-01-01 1930-01-01 

$`2` 
     from   to 
1: 1930-01-01 1940-01-01 

$`3` 
     from   to 
1: 1940-01-01 1950-01-01 

$`4` 
     from   to 
1: 1950-01-01 1960-01-01 

$`5` 
     from   to 
1: 1960-01-01 1970-01-01 

$`6` 
     from   to 
1: 1970-01-01 1980-01-01 

$`7` 
     from   to 
1: 1980-01-01 1990-01-01 

$`8` 
     from   to 
1: 1990-01-01 2000-01-01 

Vous pouvez créer beaucoup d'autres paires de dates, par différentes années, semaines, jours, etc., en utilisant le paramètre by dans seq et la lubridate fonctions.