Как вычесть/добавить дни с/на дату?
Я пытаюсь создать папки для хранения данных. Я хочу пометить папки в день этих данных в pull.
Ex. Я тяну 5 дней назад данные от mysql, я хочу назвать папку датой с 5 дней назад.
MySQL может легко обрабатывать арифметику даты. Я точно не знаю, как это делается R. Должен ли я просто вычесть соответствующее количество секунд в POSIXct и затем преобразовать в POSIXlt, чтобы назвать папку MM_DD_YYYY?
Или есть лучший способ?
Ответы
Ответ 1
Просто вычтите число:
> 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"
Ответ 2
Ответ, вероятно, зависит от формата, в котором находится ваша дата, но вот пример с помощью класса Date
:
dt <- as.Date("2010/02/10")
new.dt <- dt - as.difftime(2, unit="days")
Вы даже можете играть с разными единицами, например неделями.
Ответ 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"