将月份添加到日期 [英] Add a month to a Date

查看:43
本文介绍了将月份添加到日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我拥有的日期添加一个月.但是到目前为止,它不可能以直接的方式进行.以下是我尝试过的.

d <- as.Date("2004-01-31")d + 60# [1] "2004-03-31"

添加不会有帮助,因为月份不会重叠.

seq(as.Date("2004-01-31"), by = "month", length = 2)# [1] "2004-01-31" "2004-03-02"

以上可能有效,但它又不是直截了当的.此外,它还添加了 30 天或类似以下问题的日期

seq(as.Date("2004-01-31"), by = "month", length = 10)# [1] "2004-01-31" "2004-03-02" "2004-03-31" "2004-05-01" "2004-05-31" "2004-07-01" "2004-07-31" "2004-08-31" "2004-10-01" "2004-10-31"

在上面,前2个日期,月份没有变化.

以下方法也失败了一个月,但成功了一年

d <- as.POSIXlt(as.Date("2010-01-01"))d$year <- d$year +1d# [1] "2011-01-01 UTC"d <- as.POSIXlt(as.Date("2010-01-01"))d$month <- d$month +1d

<块引用>

format.POSIXlt(x, usetz = TRUE) 中的错误:'x' 参数无效

这样做的正确方法是什么?

解决方案

Vanilla R 有一个简单的 difftime 类,但是 Lubridate CRAN 包可让您按要求执行操作:

需要(润滑)d <- ymd(as.Date('2004-01-01')) %m+% 月 (1)d[1] 《2004​​-02-01》

希望有所帮助.

I am trying to add a month to a date i have. But then its not possible in a straight manner so far. Following is what i tried.

d <- as.Date("2004-01-31")
d + 60
# [1] "2004-03-31"

Adding wont help as the month wont be overlapped.

seq(as.Date("2004-01-31"), by = "month", length = 2) 
# [1] "2004-01-31" "2004-03-02"

Above might work , but again its not straight forward. Also its also adding 30 days or something to the date which has issues like the below

seq(as.Date("2004-01-31"), by = "month", length = 10) 
#  [1] "2004-01-31" "2004-03-02" "2004-03-31" "2004-05-01" "2004-05-31" "2004-07-01" "2004-07-31" "2004-08-31" "2004-10-01" "2004-10-31"

In the above , for the first 2 dates , month haven’t changed.

Also the following approach also failed for month but was success for year

d <- as.POSIXlt(as.Date("2010-01-01"))
d$year <- d$year +1
d
# [1] "2011-01-01 UTC"
d <- as.POSIXlt(as.Date("2010-01-01"))
d$month <- d$month +1
d

Error in format.POSIXlt(x, usetz = TRUE) : invalid 'x' argument

What is the right method to do this ?

解决方案

Vanilla R has a naive difftime class, but the Lubridate CRAN package lets you do what you ask:

require(lubridate)
d <- ymd(as.Date('2004-01-01')) %m+% months(1)
d
[1] "2004-02-01"

Hope that helps.

这篇关于将月份添加到日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆