如何检测恒定周期的开始和结束?

问题描述:

我想要绘制在R.衰退阴影时期看看下面的例子,在经济衰退时期被确认为1,和非经济衰退时期是0如何检测恒定周期的开始和结束?

Date   Recession 
1918-09-01  1 
1918-10-01  1 
1918-11-01  1 
1918-12-01  1 
1919-01-01  1 
1919-02-01  1 
1919-03-01  1 
1919-04-01  0 
1919-05-01  0 
1919-06-01  0 
1919-07-01  0 
1919-08-01  0 
1919-09-01  0 
1919-10-01  0 
1919-11-01  0 
1919-12-01  0 
1920-01-01  0 
1920-02-01  1 
1920-03-01  1 
1920-04-01  1 
1920-05-01  1 

谁能帮我拿起经济衰退时期的开始日期和结束日期?预期成果:

Start     End 
1918-09-01  1919-03-01 
1920-02-01  1920-05-01 

Similar question已经在几年前问过,但我想答案是不能够解决这个问题。

+0

你看过'?rle'吗? –

data <- read.csv('recession.csv') 

# Add new first and last row to the data, to enable the detection of change 
# in the beginning and in the end of the time series. 
data <- rbind(c(NA, ifelse(data$Recession[1] == 1, yes = 0, no = NA)), 
       data, 
       c(NA, ifelse(data$Recession[length(data$Recession)] == 1, 0, NA))) 

# Create new data frame containing the start and end of each recession period. 
# The periods are detected via built in diff function which calculates 
# differences between all consecutive values in a vector. 
recession.periods <- data.frame(
    Start = data$Date[which(diff(data$Recession, lag = 1) == 1) + 1], 
    End = data$Date[which(diff(data$Recession, lag = 1) == -1)])