web-dev-qa-db-ja.com

年を減算する方法は?

私はRに日付があります、例えば:

_dt = as.Date('2010/03/17')
_

うるう年などの問題を心配することなく、この日付から2年を差し引き、as.Date('2010-03-17')を取得したいと思います。

どうすればいいですか?

41
gt6989b

最も簡単な方法は、POSIXltに変換し、年スロットから2を引くことです。

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

この関連質問を参照してください: Rで日数を減算する方法?

47
Shane

lubridateを使用

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

seqを使用できます:

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

うるう日を考慮する場合は、この潤滑関数を使用して月を減算することをお勧めします。他の方法では3月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"
7
Hugo Silva

Rcsによるものと同じ答えですが、ベクトルで操作する可能性があります(MichaelChiricoに答えるために、私は十分な担当者がいないとコメントすることはできません):

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"
3