【发布时间】:2011-01-16 08:00:36
【问题描述】:
我正在尝试构建文件夹来存储数据拉取。我想用拉取数据的日期标记文件夹。
例如。我从 mysql 中提取 5 天前的数据,我想将文件夹命名为 5 天前的日期。
MySQL 可以轻松处理日期运算。我不确定 R 到底是如何做到的。我是否应该在 POSIXct 中减去适当的秒数,然后转换为 POSIXlt 以命名文件夹 MM_DD_YYYY?
或者有没有更好的方法?
【问题讨论】:
我正在尝试构建文件夹来存储数据拉取。我想用拉取数据的日期标记文件夹。
例如。我从 mysql 中提取 5 天前的数据,我想将文件夹命名为 5 天前的日期。
MySQL 可以轻松处理日期运算。我不确定 R 到底是如何做到的。我是否应该在 POSIXct 中减去适当的秒数,然后转换为 POSIXlt 以命名文件夹 MM_DD_YYYY?
或者有没有更好的方法?
【问题讨论】:
只需减去一个数字:
> as.Date("2009-10-01")
[1] "2009-10-01"
> as.Date("2009-10-01")-5
[1] "2009-09-26"
由于Date 类只有几天,你可以对它进行基本的算术运算。
如果你出于某种原因想使用 POSIXlt,那么你可以使用它的插槽:
> a <- as.POSIXlt("2009-10-04")
> names(unclass(as.POSIXlt("2009-10-04")))
[1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst"
> a$mday <- a$mday - 6
> a
[1] "2009-09-28 EDT"
【讨论】:
trunc() 和 round() 也可用于修剪 POSIXt 对象。
format 和as.Date,例如as.Date('15/02/2015', format('%d/%m/%Y'))+ 21
答案可能取决于您的日期格式,但这里有一个使用 Date 类的示例:
dt <- as.Date("2010/02/10")
new.dt <- dt - as.difftime(2, unit="days")
您甚至可以使用不同的单位,例如周。
【讨论】:
当然有lubridate 解决方案:
library(lubridate)
date <- "2009-10-01"
ymd(date) - 5
# [1] "2009-09-26"
与
相同ymd(date) - days(5)
# [1] "2009-09-26"
其他时间格式可能是:
ymd(date) - months(5)
# [1] "2009-05-01"
ymd(date) - years(5)
# [1] "2004-10-01"
ymd(date) - years(1) - months(2) - days(3)
# [1] "2008-07-29"
【讨论】: