关于持续时间与周期如何在每月添加的润滑剂中起作用的混淆

时间:2013-02-20 22:55:57

标签: r date lubridate

以下是我认为可能存在的错误:

require(lubridate)
d = as.Date("1994-03-31")
> d + months(1)
  [1] "1994-05-01"

我的理解是,这应该会在1994年4月底返回。请告知这是否确实是一个错误。

1 个答案:

答案 0 :(得分:8)

这不是一个错误,它是一个记录在案的功能。 绝对不是lubridate中的错误  monthsas.Date都是base个包函数。 。 (编辑。months.numericmonths.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" 

请注意,此功能是在version 1.2.0中引入的,因此未在http://www.jstatsoft.org/v40/i03/paper中记录,因为这是在实施之前编写的

另请注意,您也可以使用duration(1, 'months')

 d + duration(1, 'months')
 ## [1] "1994-04-30"