我想生成一个间隔为四分之一的日期序列,其中包含开始日期和结束日期。我有以下代码:
> 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) 或者在没有任何包的情况下,在 from
和 to
中添加 1,以便它们位于下个月的月初,创建序列(它对第一个月的序列没有问题),然后从生成的序列中减去 1,得到与上面相同的结果。
seq(from + 1, to + 1, by = "quarter") - 1
关于r - 每季度生成日期序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68975376/