从二进制时间序列创建列表

时间:2016-12-26 06:06:05

标签: r time-series timespan dygraphs

我有一个简单的二进制时间序列,它列出了美国是否处于经济衰退期间(https://fred.stlouisfed.org/series/USRECM),我想将其添加为dygraph中的阴影区域。但是,dygraphs只列入一个列表(参见link及以下),因此我需要一种快速简便的方法来创建每个衰退期的列表,标记为1。

在R中执行此操作的任何有效方法,而不会编写查看当前和滞后值的函数。

    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")
)

1 个答案:

答案 0 :(得分:1)

是的,日期和lubridate包的'seq'function。例如,这将创建一系列相隔10年的日期。

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))

这将创建如下内容:

$`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

您可以使用byseq函数中的lubridate参数,按不同的年数,周数,天数等创建许多其他日期对。