如何在 R 中以字符串形式滞后日期

How to lag dates in form of strings in R

以下日期向量以字符串序列的形式给出:

d <- c("01/09/1991","01/10/1991","01/11/1991","01/12/1991")  

我想示范性地将此向量滞后 1 个月,这意味着生成以下结构:

d <- c("01/08/1991","01/09/1991","01/10/1991","01/11/1991")

我的数据要大得多,我也必须施加更高的滞后,但这似乎是我需要知道的基础。 通过这样做,我希望最后再次具有相同的格式:("%d/%m/%Y)。这怎么能在 R 中完成?我找到了几个包(例如 lubridate),但我总是必须在格式(字符串、日期等)之间进行转换,所以它有点混乱而且似乎容易出错。
编辑:关于我为什么要这样做的更多信息:我将这个向量用作矩阵的行名,所以我更喜欢最终结果再次是字符串向量的解决方案。

我的解决方案使用 lubridate,但它return 以指定格式满足您的需求:

require(lubridate)
d <- c("01/09/1991","01/10/1991","01/11/1991","01/12/1991")  
format(as.Date(d,format="%d/%m/%Y")-months(1),'%d/%m/%Y')

[1] "01/08/1991" "01/09/1991" "01/10/1991" "01/11/1991"

然后您可以通过指定您想要的内容来更改滞后和(如果需要)输出(这是这一部分:'%d/%m/%Y')。

这不使用任何包。我们转换为"POSIXlt"class,将月份分量减一再转换回来:

fmt <- "%d/%m/%Y"
lt <- as.POSIXlt(d, format = fmt)
lt$mon <- lt$mon - 1
format(lt, format = fmt)
## [1] "01/08/1991" "01/09/1991" "01/10/1991" "01/11/1991"