在R中生成时间序列作为字符串(非标准)

问题描述 投票:0回答:2

我有一个工作表,只接受显示年 - 月期间的特定格式。

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"

我试图通过以下方式解决这个问题(但是没有想法,因为我的时期通常永远不会以M01M12开始或结束

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)`
r date
2个回答
2
投票

这工作:

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"

2
投票

你可以使用功能:

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")
© www.soinside.com 2019 - 2024. All rights reserved.