关于 r:从 2 月开始的日期加上 6 个月 | 珊瑚贝

Add 6 months to a date starting february


我正在尝试使用 lubridate 库从 2 月到日期减去 3 个月,但是,它总是给我 28 的日期。我知道很多人都问过这个问题,但我尝试了很多东西,但是仍然是同样的错误。循环一天是一种选择。但是,我一直在寻找有效的东西

我的代码是这样的:

其中 test_end = “2019-02-28”
和 lastnmonth = 3

as.Date(test_end) %m-% months(lastnmonth)

我总是得到输出为 “2018-11-28” 而不是 “2018-11-30”

  • 那是 3 个月,而不是 6 个月。您可以编辑问题。
  • 已更正。任何一个月份,日期都生成为 28。你会碰巧知道解决方案吗?
  • 不,只是路过。不知道 r 或 lubridate 但是,应用常识,这完全取决于在给定上下文中被认为是”一个月”的内容。您可能需要搜索有关您使用的months() 函数(?) 的详细信息。而且您的第一句话仍然具有误导性-无论您减去哪个日期,您都会得到 28 吗?我不这么认为。
  • 我提到,它是从二月开始的。所以要么 28 要么 29


使用 Dirk 的策略,我们可以设计一个函数来处理这种类型的操作:

1
2
3
4
5
6
7
8
9
10
11
12
start_date       <- lubridate::ymd(“2019-02-28”)
mths_to_subtract <- 3

deduct_mth <- function(date_object = start_date,
                       mths_to_deduct = mths_to_subtract){

  days_to_ceiling_date <- lubridate::ceiling_date(date_object,”months”) – date_object

  date_object + days_to_ceiling_date – lubridate::period(mths_to_deduct,”months”) – days_to_ceiling_date

}

给出以下答案:

1
2
3
4
> deduct_mth(ymd(“2019-02-28”), 3)
[1]”2018-11-30″
> deduct_mth(ymd(“2000-02-29”), 3)
[1]”1999-11-30″

你想要一个月的最后一天——所以你可以使用下一个是第一个的技巧,将它移动月数——然后减去一天。

在一行base R:

1
2
3
R> seq(as.Date(“2019-02-28″) + 1, length=4, by=”-1 month”) – 1
[1]”2019-02-28″”2019-01-31″”2018-12-31″”2018-11-30″
R>

我们添加一天,然后使用四个月的序列(包括当前)倒数,然后取出一天作为上个月的最后一天。

如果你只想要一个,只需添加 tail(…, 1):

1
2
3
R> tail(seq(as.Date(“2019-02-28″) + 1, length=4, by=”-1 month”) – 1, 1)
[1]”2018-11-30″
R>

1
lubridate::ymd(“2019-02-28″) – lubridate::period(3,”months”)

额外的代码来锻炼 mont-end

1
lubridate::ceiling_date(lubridate::ymd(“2019-02-28″) – lubridate::period(3,”months”),”months”) – lubridate::ddays(1)
  • 我试过了,不行。另外,我正在使用 Windows 而不是 mac(仅供参考)
  • 所以它没有办法知道 28Feb 是一个月末,所以自然会带你回到当前日期的 3 个月。如果你想校准到月底,那么你需要告诉机器。我为此提供了额外的代码。


来源:https://www.codenong.com/55484337/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9166.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?