以下是我认为可能的错误:
require(lubridate)
d = as.Date("1994-03-31")
> d + months(1)
[1] "1994-05-01"
Run Code Online (Sandbox Code Playgroud)
我的理解是,这应该返回到1994年4月底.请告知这是否确实是一个错误.
它不是一个bug,它是一个记录的功能.这绝对不是一个错误.(编辑.lubridate
的months和as.Date都是base包功能.months.numeric并且months.integer是lubridate包中的不可见功能.
但是,luibridate确实有答案!
它完全按照帮助文件中的指定执行%m+%(这是lubridate包的一部分.)
添加月份会使基本算术受挫,因为连续几个月的长度不同 使用其他元素,算术执行自动翻转是有帮助的.例如,12:00:00 + 61秒变为12:01:01.然而,人们通常更喜欢这种行为不会发生几个月.例如,我们有时希望1月31日+ 1月= 2月28日而不是3月3日.月(n)始终返回日期后第n个月的日期.如果新的日期通常会溢出到第n + 1个月,那个月.日期前n个月的日期.
该功能%m+%旨在确保您想要的功能,确保月份不会翻转
d %m+% months(1)
## [1] "1994-04-30"
Run Code Online (Sandbox Code Playgroud)
请注意,此功能是在1.2.0版本中引入的,因此未在http://www.jstatsoft.org/v40/i03/paper中记录,因为这是在实现之前编写的
另请注意,您也可以使用 duration(1, 'months')
d + duration(1, 'months')
## [1] "1994-04-30"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |