Rに日付があります。例:
dt = as.Date('2010/03/17')
うるう年などの問題を気にせず、この日付から2年を引いて取得したいと思いますas.Date('2010-03-17')
。
どうすればいいですか?
Rに日付があります。例:
dt = as.Date('2010/03/17')
うるう年などの問題を気にせず、この日付から2年を引いて取得したいと思いますas.Date('2010-03-17')
。
どうすればいいですか?
とlubridate
library(lubridate)
ymd("2010/03/17") - years(2)
最も簡単な方法は、それをPOSIXltに変換し、年のスロットから2を引くことです。
> d <- as.POSIXlt(as.Date('2010/03/17'))
> d$year <- d$year-2
> as.Date(d)
[1] "2008-03-17"
この関連する質問を参照してください:Rの日数を引く方法は?。
あなたが使用することができますseq
:
R> dt = as.Date('2010/03/17')
R> seq(dt, length=2, by="-2 years")[2]
[1] "2008-03-17"
うるう日を考慮に入れる場合は、このlubridate関数を使用して月を減算することをお勧めします。他の方法では、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"
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"
この方法も仕事をしているようです
dt = as.Date("2010/03/17")
dt-365*2
[1] "2008-03-17"
as.Date("2008/02/29")-365*2
## [1] "2006-03-01"