2010-07-22 20 views
26

Ben Ar bir tarih, ör .: Ben as.Date('2010-03-17') alma, artık yıllarda ve bu konular hakkında endişelenmeden, bu tarihten itibaren 2 yıl çıkarmak istiyoruzYıllar nasıl çıkarılır?

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

var.

Bunu nasıl yaparım?

cevap

33

Yapılması en kolay şey POSIX'e dönüştürmek ve yıl diliminden 2 çıkarmaktır. How to subtract days in R?:

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

bu ilgili soruya bakın.

+0

tercih edilir: Diğer yöntemler 1 Mart veya NA ya dönecektir olarak s dikkate alınacak daha sonra ben aylarca çıkarmak için bu lubridate işlevini kullanarak öneriyoruz Bunun için operatör. –

+2

Zorlukla, yıllarca yapabileceğinizi sanmıyorum, sadece birkaç gün veya hafta. – gt6989b

+0

Feb-29 durumunda dikkatli olun, çünkü ortaya çıkan nesnenin muhtemelen wday/mon/mday yuvaları doğru olmayacaktır! Deneyin: 'd = as.POSIXlt ('2016-02-29', tz = 'GMT'); d $ yıl = d $ yıl - 1' ve d $ wday, d $ mon, d $ değerlerini kontrol edin – digEmAll

21

Sen seq kullanabilirsiniz:

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

mday ' – MichaelChirico

43

lubridate

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

Basit bir uzantıyı kaçırmadığım sürece, bunların bir tarih listesine uygulanması için bir yol yoktur. – Farrel

+0

CRAN'dan, CRAN'ın bakıcısı tatilinden döndüğünde. – hadley

+0

Lubridate yazdın mı? R. 'un en rahatsız edici yönlerinden birini ele aldığımı keşfettiğim için, birisinin tatilden dönmesini beklemeden yağmura nereden gelebilirim? – Farrel

2
rcs tarafından değil bir vektör üzerine çalışmasına imkanı ile olandan

aynı cevabı ile (MichaelChirico cevap vermek, yapabilirim 't yorum yok yeterli 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" 
6

Artık gün varsa - Elimizdeki `difftime` rcs en aşağıda cevap

> 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" 
+0

28 Şubat veya 1 Mart tarihlerinde bir kongre meselesi olsun. 'NA' kesinlikle kabul edilemez, katılıyorum. Bilgi eklediğiniz için teşekkürler. – gt6989b

İlgili konular