提问人:Dan 提问时间:2/13/2010 最后编辑:JaapDan 更新时间:10/23/2017 访问量:167701
如何从日期中减去/添加天数?
How to subtract/add days from/to a date?
问:
我正在尝试构建文件夹来存储数据拉取。我想在拉取中用该数据的日期标记文件夹。
前任。我从 mysql 中提取 5 天前的数据,我想将文件夹命名为 5 天前的日期。
MySQL可以轻松处理日期算术。我不确定 R 到底是怎么做到的。我是否应该只在 POSIXct 中减去适当的秒数,然后转换为 POSIXlt 以将文件夹命名为 MM_DD_YYYY?
还是有更好的方法?
答:
63赞
Aniko
2/13/2010
#1
答案可能取决于您的日期采用的格式,但下面是使用该类的示例:Date
dt <- as.Date("2010/02/10")
new.dt <- dt - as.difftime(2, unit="days")
您甚至可以玩不同的单位,例如周。
评论
10赞
jbaums
6/10/2011
as.difftime 的有效单位为:“secs”、“mins”、“hours”、“days”、“weeks”。
0赞
Erik A
2/14/2022
在我看来,这是最好的答案,因为它适用于 POSIXct 和 POSIXlt 字段,而不会在以 R 为基数时丢弃时间信息。虽然答案说这可能取决于您的日期格式,但它似乎适用于基本 R 中的所有有效日期格式。
118赞
Shane
2/13/2010
#2
只需减去一个数字:
> 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"
评论
1赞
Sharpie
2/13/2010
或者使用 POSIXct 并减去一天的秒数。 并且对于修剪 POSIXt 对象也很有用。trunc()
round()
0赞
Dan
2/15/2010
好吧,这看起来是迄今为止最好的。只是为了确保它正确处理不同的月日数量和闰年?
0赞
Shane
2/23/2010
是的,它正确地完成了所有这些事情。您可以通过将日期设置为夏令时前后(例如)来自己进行快速测试,以确认这一点,因为每种方法可能具有不同的行为。
0赞
Robert Casey
10/9/2014
此外,R 文档指出,$yday仅供参考,不能用于递增日期。
0赞
tagoma
1/2/2016
并根据您的需要一起使用,例如format
as.Date
as.Date('15/02/2015', format('%d/%m/%Y'))+ 21
50赞
J_F
9/26/2016
#3
当然,有一个解决方案: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"
评论
3赞
JASC
5/19/2019
对于经常使用日期的人来说,润滑剂库是最直观的选择。
1赞
feinmann
3/2/2020
一定要尝试 %m+%(和 %m-%)运算符在 1 月 31 日之前添加(减去)一个月,而不会破坏任何内容。
上一个:如何减去年?
下一个:如何按组获取汇总统计信息
评论