避免if else声明

MVa*_*ard 0 if-statement r

我有以下ifelse声明:

Years=c(2016, 2021, 2026, 2031, 2035)
if (Year == Years[1]){OD = subset(data,data$YEAR>=Years[1] & data$YEAR <= Years[1]+2)}
if (Year == Years[2]){OD = subset(data,data$YEAR>=Years[2]-2 & data$YEAR <= Years[2]+2)}
if (Year == Years[3]){OD = subset(data,data$YEAR>=Years[3]-2 & data$YEAR <= Years[3]+2)}
if (Year == Years[4]){OD = subset(data,data$YEAR>=Years[4]-2 & data$YEAR <= Years[4]+2)}
if (Year == Years[5]){OD = subset(data,data$YEAR>=Years[5]-1 & data$YEAR <= Years[5])}
Run Code Online (Sandbox Code Playgroud)

我想要一个有效的方法来写这个没有ifelse声明.

小智 5

我不确定用于定义年份下限和上限的规则是什么,但是如何首先创建定义下限和上限的向量:

Years <- c(2016, 2021, 2026, 2031, 2035)
Years.lower <- c(2016, 2021-2, 2026-2, 2031-2, 2035-1)
Years.upper <- c(2016+2, 2021+2, 2026+2, 2031+2, 2035)
Run Code Online (Sandbox Code Playgroud)

然后data根据Years对象中的哪一个Year对应于子集:

OD <- subset(data, data$YEAR>=Years.lower[which(Years==Year)] & data$YEAR <= Years.upper[which(Years==Year)])
Run Code Online (Sandbox Code Playgroud)