2015-11-03 53 views
0

日期的下列矢量在一个串序列的形式给出的字符串的形式:如何滞后日期作为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),但我总是必须在格式(字符串,日期和更多)之间进行转换,所以它有点混乱,似乎很容易出错。
编辑:一些更多的信息,为什么我想这样做:我使用这个向量作为矩阵的rownames,所以我更喜欢一个解决方案,最终的结果是一个字符串向量。

回答

3

这不使用任何软件包。我们转换为"POSIXlt"类,减一月份部分和转换回:

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" 
+0

有趣的我不知道这可以用'POSIXlt'完成。谢谢。 – EDC

2

我的解决方案使用lubridate但它返回你想要在指定的格式:

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')由指定你想要的。

+0

泰为入门,您的解决方案正常工作的! – EDC