Я бы порекомендовал использовать в ваших расчетах добросовестные даты.Это позволяет нам воспользоваться преимуществом функции seq
базового R:
x <- seq(as.Date("2018/3/1"), as.Date("2019/3/1"), by="month")
x[format(x, "%m") %in% c("01", "03", "05")]
[1] "2018-03-01" "2018-05-01" "2019-01-01" "2019-03-01"
Если вы действительно хотите получить именно тот формат, который у вас есть, вы можете легко сделать это с помощью другого вызова format
:
y <- x[format(x, "%m") %in% c("01", "03", "05")]
format(y, "%Y%m")
[1] "201803" "201805" "201901" "201903"
Или, для вашего точного вывода:
sub("(?<=\\d{4}).", "", format(y, "%Y%m"), perl=TRUE)
[1] "20183" "20185" "20191" "20193"