【问题标题】:Adding quarters to R date将季度添加到 R 日期
【发布时间】:2016-10-28 19:34:09
【问题描述】:

我有一个 R 时间序列数据,我正在计算截至特定日期的所有值的均值,并将其存储在日期 + 4 个季度中。日期都是月末。为了实现这一点,我希望将 4 个季度增加到一个日期。我的问题是如何将 4 个季度添加到 R 日期数据类型。插图:

a <- as.Date("2006-01-01")
b <- as.Date("2011-01-01")
date_range <- quarter(seq.Date(a, b, by = "quarter"), with_year = TRUE)

> date_range[1] + 1
[1] 2007.1

> date_range[1] + quarter(1)
[1] 2007.1

> date_range[1] + 0.25
[1] 2006.35

我正在考虑的一种可能方法是获取年季度日期,然后将其添加 4。但不确定最好的方法是什么?

【问题讨论】:

  • 像时间序列一样使用.25 符号可能更容易,例如time(ts(NA, start = 2006, end = 2011, frequency = 4))

标签: r date time-series zoo lubridate


【解决方案1】:

只是增加 12 个月或一年?

或者如果它必须是四分之一,给自己定义一个函数,像这样:

quarters <- function(x) {
   months(3*x)
}

然后用它添加到日期序列中:

date_range <- seq.Date(a, b, by = "quarter")
date_range + quarters(4)

【讨论】:

    【解决方案2】:

    问题是四分之一有不同的长度。第 1 季度最短,因为它包括 2 月(尽管闰年与第 2 季度相关)。像这样的事情使得“在日期中添加四分之一”定义不明确。即使在日期的末尾添加月份也可能很棘手 - 1 月 31 日之后的 1 个月是多少?

    月份的开始更简单,我建议您使用季度的第一天而不是最后一天(如果您必须使用特定日期)。 lubridate 提供 floor_date() 和 ceiling_date() 之类的函数,您可以将 unit = "quarter" 传递给它们,它们将分别返回当前或下一季度的第一天。您也可以随时在一个月的开始将months(3) 添加到一天,当然,如果您打算添加 4 个季度,您也可以只添加 1 年。

    【讨论】:

      【解决方案3】:

      Lubridate 具有已包含的季度功能。这是一个比创建自己的函数更好的解决方案。

      https://www.rdocumentation.org/packages/lubridate/versions/1.7.4/topics/quarter

      【讨论】:

      • 解释什么更好。
      【解决方案4】:

      注意问题上的动物园标签,yearmon 类将年/月表示为年 + 分数,其中分数为 0 表示一月,1/12 表示二月,2/12 表示三月,...,11/12 表示十二月. 因此,加 4 个季度只是加 1 的问题。(加 x 个季度是通过加 x/4 完成的。)

      library(zoo)
      ym <- yearmon(2006) + 0:11/12   # months in 2006
      ym + 1 # one year later
      

      这也将 yearmon 对象转换为月末日期,并将第二行中的 Date 转换为 yearmon。在第一行使用frac = 0 或省略frac 将转换为月初日期。

      d <- as.Date(ym, frac = 1)  # d is Date vector of end-of-months
      as.yearmon(d)  # convert Date vector to yearmon
      

      如果您的输入日期代表季度,那么还有 yearqtr 类,它表示一年/季度为年 + 分数,其中分数为一年的 4 个季度的 0、1/4、2/4、3/4。添加 4 个季度是通过添加 1(或添加 x 个季度添加 x/4)来完成的。

      yq <- as.yearqtr(2006) + 0:3/4   # all quarters in 2006
      yq + 1  # one year later
      

      转换的工作方式与 yearmon 类似:

      d <- as.Date(ym, frac = 1)  # d is Date vector of end-of-quarters
      as.yearqtr(d)  # convert Date vector to yearqtr
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 2021-07-26
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多