【问题标题】:Interpolating monthly dates between two months in R [duplicate]在R中插入两个月之间的每月日期[重复]
【发布时间】:2016-06-22 22:16:43
【问题描述】:

我在 R 中有两个日期,我想在它们之间创建一个日期向量,间隔为一个月。但是,R 似乎改为使用 31 天的间隔(有时?)。例如:

x <- as.Date("31-01-1900", "%d-%m-%Y")
y <- as.Date("31-01-1901", "%d-%m-%Y")
seq(x, y, by="month")

 [1] "1900-01-31" "1900-03-03" "1900-03-31" "1900-05-01" "1900-05-31"
 [6] "1900-07-01" "1900-07-31" "1900-08-31" "1900-10-01" "1900-10-31"
[11] "1900-12-01" "1900-12-31" "1901-01-31"

我想要的是一个日期向量,每个日期都是每个月的最后一天,如下所示:

 [1] "1900-01-31" "1900-02-29" "1900-03-31" "1900-04-30" "1900-05-31"
 [6] "1900-06-30" "1900-07-31" "1900-08-31" "1900-09-30" "1900-10-31"
[11] "1900-11-30" "1900-12-31" "1901-01-31"

R 是否知道月份的长度,还是我必须手动完成?

【问题讨论】:

  • 您可以查看lubridate 包,但这是 ?seq.POSIXt 的摘录:“使用“月”首先将月份提前而不更改日期:如果这导致当月无效日,顺延至下月。”所以看起来这在这些函数中是固定的。

标签: r date


【解决方案1】:

可以生成每个月的第一个序列,然后减去1

seq(as.Date("1900-02-01"), length = 12, by="1 month") - 1
# [1] "1900-01-31" "1900-02-28" "1900-03-31" "1900-04-30" "1900-05-31" "1900-06-30"
# [7] "1900-07-31" "1900-08-31" "1900-09-30" "1900-10-31" "1900-11-30" "1900-12-31"

## the same can be achieved with `seq.Date()`
# seq.Date(as.Date("1900-02-01"), by = "1 month", length.out = 12) - 1 

【讨论】:

  • 两个答案都很好,但我更喜欢这个,因为它不需要包。
  • 我也是;我一般会先尝试使用基本 R 解决方案。
【解决方案2】:

我们可以使用lubridate

library(lubridate)
x <- as.Date("31-01-1900", "%d-%m-%Y")
y <- as.Date("31-01-1901", "%d-%m-%Y")
c(x, x %m+% months(1:11), y)

[1] "1900-01-31" "1900-02-28" "1900-03-31" "1900-04-30"
[5] "1900-05-31" "1900-06-30" "1900-07-31" "1900-08-31"
[9] "1900-09-30" "1900-10-31" "1900-11-30" "1900-12-31"
[13] "1901-01-31"

或者,等效地,并且可能更容易阅读:

lubridate::add_with_rollback(x, months(0:12))

 [1] "1900-01-31" "1900-02-28" "1900-03-31" "1900-04-30"
 [5] "1900-05-31" "1900-06-30" "1900-07-31" "1900-08-31"
 [9] "1900-09-30" "1900-10-31" "1900-11-30" "1900-12-31"
[13] "1901-01-31"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多