r - 每季度生成日期序列

标签 r date

我想生成一个间隔为四分之一的日期序列,其中包含开始日期和结束日期。我有以下代码:

> seq(as.Date('1980-12-31'), as.Date('1985-06-30'), by = 'quarter')
 [1] "1980-12-31" "1981-03-31" "1981-07-01" "1981-10-01" "1981-12-31"
 [6] "1982-03-31" "1982-07-01" "1982-10-01" "1982-12-31" "1983-03-31"
[11] "1983-07-01" "1983-10-01" "1983-12-31" "1984-03-31" "1984-07-01"
[16] "1984-10-01" "1984-12-31" "1985-03-31"

如您所见,这没有生成正确的序列,因为我不明白日期 "1981-07-01" 是如何来到这里的,我希望 "1981-06 -30"

有没有办法以四分之一间隔正确生成这样的序列?

感谢您的宝贵时间。

最佳答案

问题中的起始日期和截止日期都是季度末日期,因此我们假设这是您感兴趣的一般情况。

1) 创建一系列yearqtr对象yq,然后将它们转换为Date类。 frac=1 告诉它使用月底。或者,只需使用 yq,因为它可以直接对年份和季度进行建模。

library(zoo)

from <- as.Date('1980-12-31')
to <- as.Date('1985-06-30')

yq <- seq(as.yearqtr(from), as.yearqtr(to), by = 1/4)
as.Date(yq, frac = 1)

给予;

 [1] "1980-12-31" "1981-03-31" "1981-06-30" "1981-09-30" "1981-12-31"
 [6] "1982-03-31" "1982-06-30" "1982-09-30" "1982-12-31" "1983-03-31"
[11] "1983-06-30" "1983-09-30" "1983-12-31" "1984-03-31" "1984-06-30"
[16] "1984-09-30" "1984-12-31" "1985-03-31" "1985-06-30"

2) 或者在没有任何包的情况下,在 fromto 中添加 1,以便它们位于下个月的月初,创建序列(它对第一个月的序列没有问题),然后从生成的序列中减去 1,得到与上面相同的结果。

seq(from + 1, to + 1, by = "quarter") - 1

关于r - 每季度生成日期序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68975376/

相关文章:

r - 在 R 中合并并连接两个数据帧

r - 将儒略日转换为 mm/dd 并从 r 中数据框中的另一列添加年份

java - 作业: Java calculator dealing with dates -- Is my array correct?

javascript - 格式化日期不从字符串分配新数据

r - 在合并另一个列值时折叠数据框中的行

r - RStudio 中的脚本注释未显示在控制台中

r - 是否可以在不移动光标的情况下在 RStudio 中运行当前行或选择?

r - 如何在 R 中输入不同的变量作为 readline 的输入?

python 获取文件的时间戳,格式为 mm/dd/yyyy-HH :MM format

mysql - 左外连接不返回左表中的所有行?