从开始日期创建 year/quarters 的向量

Create a vector of year/quarters from a starting date

我有一个字符串开始日期,例如“2021 Q3”,我想在开始日期之后创建一个“Year Quarter”向量。例如,如果所需的长度是 5,我的输出将是

“2021 年第三季度”“2021 年第四季度”“2022 年第一季度”“2022 年第二季度”“2022 年第三季度”

我尝试在 base R 中使用 as.Date() 无济于事。

在 R 中有简洁的方法吗?

将输入 x 转换为 yearqtr class。它将年度和季度间表示为年 + 0、1/4、1/2 和 3/4,因此只需添加所需的季度数即可。它如图所示呈现它们。有关详细信息,请参阅 ?yearqtr

library(zoo)

x <- "2021 Q3"
as.yearqtr(x) + seq(0, length = 5) / 4
## [1] "2021 Q3" "2021 Q4" "2022 Q1" "2022 Q2" "2022 Q3"

我写这个可笑的函数很开心,然后看到G.Grothendieck的好答案,自嘲一下:

library(lubridate)
library(stringr)

f <- function(s,n) {
  y=as.numeric(str_extract(s,"\d{4}"))
  q = as.numeric(str_extract(s,"(?<=Q)\d+"))
  dates = seq(make_date(y,q*3,15),by="quarter", length.out=n)
  paste0(year(dates), " Q", quarter(dates))
}

用法:

f("2020 Q2",30)

输出:

 [1] "2020 Q2" "2020 Q3" "2020 Q4" "2021 Q1" "2021 Q2" "2021 Q3" "2021 Q4" "2022 Q1" "2022 Q2" "2022 Q3" "2022 Q4" "2023 Q1" "2023 Q2" "2023 Q3" "2023 Q4" "2024 Q1"
[17] "2024 Q2" "2024 Q3" "2024 Q4" "2025 Q1" "2025 Q2" "2025 Q3" "2025 Q4" "2026 Q1" "2026 Q2" "2026 Q3" "2026 Q4" "2027 Q1" "2027 Q2" "2027 Q3"