2010-07-22 17 views
26

मैं उदाहरण के आर में एक तिथि, .:वर्षों को घटाना कैसे करें?

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

मैं इस दिनांक से 2 वर्षों घटाना, लीप वर्ष और इस तरह के मुद्दों के बारे में चिंता हो रही as.Date('2010-03-17') बिना करना चाहते हैं।

मैं यह कैसे करूँगा?

उत्तर

33

सबसे आसान बात यह है कि इसे POSIXlt में परिवर्तित करना और सालों से 2 घटाएं।

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

इस संबंधित प्रश्न को देखें: How to subtract days in R?

+0

आरसीएस के नीचे का जवाब बेहतर है - हम क्या ज़रूरत है 'difftime' इसके लिए ऑपरेटर। –

+2

अलग-अलग के साथ, मुझे नहीं लगता कि आप साल, बस दिन या सप्ताह कर सकते हैं। – gt6989b

+0

फरवरी -2 9 के मामले में सावधान रहें, क्योंकि परिणामस्वरूप ऑब्जेक्ट में शायद wday/mon/mday स्लॉट सही नहीं होंगे! आज़माएं: 'd = as.POSIXlt ('2016-02-29', tz = 'GMT'); डी $ वर्ष = डी $ वर्ष - 1' और' d $ wday, d $ mon, d $ के मानों की जांच करें mday' – digEmAll

21

आप seq इस्तेमाल कर सकते हैं:

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

तारीखों की सूची में इसे लागू करने का कोई तरीका नहीं है, हालांकि, जब तक कि मुझे एक साधारण एक्सटेंशन नहीं मिल रहा है – MichaelChirico

43

lubridate

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

कोई कहां से लुब्र्रिडेट प्राप्त करता है? – Farrel

+0

सीआरएएन से, जैसे ही सीआरएएन रखरखाव अपनी छुट्टी से वापस आ जाता है। – hadley

+0

क्या आपने लुब्र्रिडेट लिखा था? मुझे आर के सबसे परेशान पहलुओं में से एक को संभालने की तिथि मिली है, तो मुझे छुट्टी से वापस आने के इंतजार किए बिना लुब्र्रिडेट कहां मिल सकता है? – Farrel

2
आरसीएस द्वारा लेकिन संभावना एक सदिश पर यह काम करने के लिए के साथ एक से

एक ही जवाब के साथ (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" 
6

यदि लीप दिन रों ध्यान में रखा जाना करने के लिए कर रहे हैं तो मैं, महीने घटाना इस lubridate समारोह उपयोग करने की अनुशंसा के रूप में अन्य तरीकों 1 या एनए मार्च वापस आ जाएगी चाहते हैं:

> 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 या मार्च 1 प्राप्त करें, सम्मेलन का विषय है। 'एनए 'स्पष्ट रूप से अस्वीकार्य है, मैं सहमत हूं। जानकारी जोड़ने के लिए धन्यवाद। – gt6989b

संबंधित मुद्दे