Подтвердить что ты не робот

Как вычитать годы?

У меня есть дата в R, например:

dt = as.Date('2010/03/17')

Я хотел бы вычесть 2 года с этой даты, не беспокоясь о високосных годах и таких проблемах, получив as.Date('2010-03-17').

Как мне это сделать?

4b9b3361

Ответ 1

Проще всего сделать это, чтобы преобразовать его в POSIXlt и вычесть 2 из слота лет.

> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"

Смотрите этот связанный вопрос: Как вычесть дни в R?.

Ответ 2

С lubridate

library(lubridate)
ymd("2010/03/17") - years(2)

Ответ 3

Вы можете использовать seq:

R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"

Ответ 4

Если дни високосного времени должны быть приняты во внимание, я бы рекомендовал использовать эту функцию lubridate для вычитания месяцев, так как другие методы возвратятся либо 1 марта, либо NA:

> library(lubridate)
> dt %m-% months(12*2)
[1] "2008-03-17"

# Try with leap day
> leapdt <- as.Date('2016/02/29')
> leapdt %m-% months(12*2)
[1] "2014-02-28"

Ответ 5

Тот же ответ, что и по rcs, но с возможностью управлять им на векторе (ответить MichaelChirico, я не могу комментировать, что мне не хватает rep):

R> unlist(lapply(c("2015-12-01", "2016-12-01"), 
      function(x) { return(as.character(seq(as.Date(x), length=2, by="-1 years")[2])) }))
 [1] "2014-12-01" "2015-12-01"