我有一个工作表,只接受显示年 - 月期间的特定格式。
2018M01
指2018年1月
2019M05
指2019年5月等
我需要指定开始时段和结束时段,然后生成与此格式兼容的日期序列。
这是一个例子:
start <- "2015M04"
end <- "2016M07"
结果:
[1] "2015M04" "2015M05" "2015M06" "2015M07" "2015M08" "2015M09"
[7] "2015M010" "2015M011" "2015M012" "2016M01" "2016M02" "2016M03"
[13] "2016M04" "2016M05" "2016M06" "2016M07"
我试图通过以下方式解决这个问题(但是没有想法,因为我的时期通常永远不会以M01
和M12
开始或结束
startyear <- 2015
endyear <- 2016
diffyear <- 2016-2015
seq_year <- rep(seq(from = startyear, to = endyear, by = 1), each = 12)
seq_quarters <- rep(seq(from = 1, to = 12, by = 1), diffyear)
paste0(seq_year, "M","0", seq_quarters)`
这工作:
start <- "2015M04"
end <- "2016M07"
date_vec <- seq.Date(
from = as.Date(paste0(gsub("M", "-", start),"-01")),
to = as.Date(paste0(gsub("M", "-", end), "-01")),
by = "m")
format(date_vec, "%YM%m")
[1] "2015M04" "2015M05" "2015M06" "2015M07" "2015M08" "2015M09" "2015M10" "2015M11" "2015M12" "2016M01" "2016M02" "2016M03"
[13] "2016M04" "2016M05" "2016M06" "2016M07"
你可以使用功能:
date_seq <- function(start,end) {
date_vec <- seq.Date(
from = as.Date(paste0(gsub("M", "-", start),"-01")),
to = as.Date(paste0(gsub("M", "-", end), "-01")),
by = "m")
return(format(date_vec, "%YM%m"))
}
date_seq("2015M04" ,"2019M08")