Как вычесть / добавить дни от / до даты? - PullRequest
46 голосов
/ 12 февраля 2010

Я пытаюсь создать папки для хранения данных. Я хочу пометить папки с указанием дня этих данных.

Ex. Я вытащил 5 дней назад данные из MySQL. Я хочу назвать папку с датой 5 дней назад.

MySQL может легко обрабатывать арифметику даты. Я не уверен точно, как R делает это. Должен ли я просто вычесть соответствующее количество секунд в POSIXct, а затем преобразовать в POSIXlt, чтобы назвать папку MM_DD_YYYY?

Или есть лучший способ?

Ответы [ 3 ]

77 голосов
/ 13 февраля 2010

Просто вычтите число:

> 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"
45 голосов
/ 13 февраля 2010

Ответ, вероятно, зависит от того, в каком формате ваша дата, но вот пример использования класса Date:

dt <- as.Date("2010/02/10")
new.dt <- dt - as.difftime(2, unit="days")

Вы даже можете играть с разными юнитами, например, неделями.

22 голосов
/ 26 сентября 2016

Существует, конечно, 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"
...