2015-05-15 12 views
7

मैं अपने डेटासेट में एक पूर्णांक स्तंभ है जो, चार अंकों में वर्ष मान हैं की तरह करने के लिए चार अंकों में वर्ष मूल्यों कन्वर्ट ।दिनांक प्रकार

कोड मैं का उपयोग कर रहा है:

year <- as.Date(as.character(data_file$evtYear), format = "%Y") 

लेकिन उत्पादन होता है:

"2001-05-15" "2002-05-15" "2002-05-15" "2002-05-15" "2003-05-15" "2005-05-15" 

यह गलत उत्पादन दे रहा है। यह एक साल में दो साल के मूल्य दे रहा है (2001 और 15 दोनों)।

मैं बस अपने चार अंकों के वर्ष भाग को मूल डेटा से दिनांक प्रकार में 'वर्ष' में परिवर्तित करना चाहता हूं। अपेक्षित आउट बस है:

2001 2002 2002 2002 2003 2005 

लेकिन उनकी कक्षा दिनांक प्रकार का होना चाहिए।

आर में इसे कैसे प्राप्त करें?

+2

'दिनांक' प्रकार आर में हमेशा वर्ष, महीना और दिन का संयोजन होता है (इस क्रम में जरूरी नहीं)। आपके पास केवल वर्ष के साथ 'दिनांक' प्रकार नहीं हो सकता है। –

+0

@ पास्कल तो क्या इसका मतलब है कि मेरे डेटा में चार अंक संख्या (2001) नहीं हो सकती है जिसका वर्ग दिनांक प्रकार है ?? – LearneR

+0

आपके पास महीने और दिन के बिना यह नहीं हो सकता है। बीटीडब्लू, आपको सिर्फ 'डेट' कक्षा में केवल वर्ष के साथ इसकी आवश्यकता क्यों है? – akrun

उत्तर

1

एक lubridate जवाब:

library(lubridate) 
    year <- ymd(sprintf("%d-01-01",data_file$evtYear)) 
+0

में कुछ नया जानना बहुत उपयोगी रहा है क्षमा करें यह मुझे अपेक्षित आउटपुट नहीं दे रहा था। लेकिन मुझे बस दूसरों की टिप्पणियों से एहसास हुआ कि मेरा अपेक्षित आउटपुट वैध नहीं है: केवल चार अंकों का साल का मूल्य दिनांक प्रकार का नहीं हो सकता है .. वैसे भी, लुब्रिडेट पैकेज को इंगित करने के लिए आपको बहुत बहुत धन्यवाद। समय आने पर इसमें देखेंगे। – LearneR

+1

आप जो कर रहे हैं उसके आधार पर यह दिनांक प्रारूप का उपयोग करने के लिए समझ में आता है और लुब्रिडेट पुस्तकालय का उपयोग करके अभ्यास प्राप्त कर सकता है। उदाहरण के लिए यदि आपको तिथियों के बीच या तिथियों के बीच की दूरी की गणना करने की आवश्यकता है। यदि आप डेटा का विश्लेषण करने जा रहे हैं तो आपको दिनांक और समय में हेरफेर करने में अच्छा होने की आवश्यकता होगी क्योंकि डेटा का एक बड़ा प्रतिशत दिनांक से संबंधित है। –

7

टिप्पणियों में यह पता चला है कि व्यक्ति को सवाल पूछने "Date" वर्ग के लिए एक अंकीय साल बदलने की जरूरत नहीं था के आधार पर; फिर भी, सवाल पूछा कि यह कैसे करना है, इसलिए यहां एक जवाब है।

यहां 4 अंकों के न्यूमेरिक वर्ष से "Date" क्लास ऑब्जेक्ट बनाने के कुछ तरीके दिए गए हैं। सभी उपयोग as.Date: क्योंकि यह एक मध्यवर्ती POSIXct वस्तु बनाता है तो समय क्षेत्र की समस्याओं मौजूद हो सकता है

yrs <- c(2001, 2002, 2002, 2002, 2003, 2005) 

1) ISOdate

as.Date(ISOdate(yrs, 1, 1)) # beginning of year 
as.Date(ISOdate(yrs, 12, 31)) # end of year 

यह ISOdate समाधान थोड़ा मुश्किल है। आप निम्न में से एक को प्राथमिकता दे सकते हैं।

2) पेस्ट

as.Date(paste(yrs, 1, 1, sep = "-")) # beginning of year 
as.Date(paste(yrs, 12, 31, sep = "-")) # end of year 

3) चिड़ियाघर :: as.yearmon

library(zoo) 

as.Date(as.yearmon(yrs)) # beginning of year 
as.Date(as.yearmon(yrs) + 11/12, frac = 1) # end of year 

नोट:y यदि उपरोक्त में से किसी के लिए परिणाम है तो format(y, "%Y") देता है चरित्र वर्ष और as.numeric(format(y, "%Y")) संख्यात्मक वर्ष देता है।

0

आप कर सकते हैं:

library(lubridate) 
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005) 
yr <- as.Date(as.character(yrs), format = "%Y") 
y <- year(yr) 

आउटपुट:

2001 2002 2002 2002 2003 2005 
+0

'lubridate :: वर्ष()' दिनांक-समय ऑब्जेक्ट का वर्ष तत्व दशमलव संख्या के रूप में देता है। तो, 'y'' yrs' के समान है। एक वैध तिथि हमेशा एक विशेष दिन की पहचान करती है, उदाहरण के लिए, वर्ष, महीना और तारीख देकर। 'मदद (" as.Date ") कहता है: * यदि दिनांक स्ट्रिंग पूरी तरह से तारीख निर्दिष्ट नहीं करती है, तो लौटाया गया उत्तर सिस्टम-विशिष्ट हो सकता है। सबसे आम व्यवहार यह मानना ​​है कि एक लापता वर्ष, महीना या दिन वर्तमान है। * तो, परिणाम इस बात पर निर्भर करता है कि जब कथन निष्पादित किया जाता है तो यादृच्छिक परिणाम होते हैं। उदा।, मेरे सिस्टम (लेखन के समय) पर, 'वर्ष' 2001-01-28', आदि है। – Uwe

0

जैसा कि पहले ही ओपी द्वारा मान्यता प्राप्त है, एक वर्ष में ही ऊपर कोई मान्य दिनांक क्योंकि माह और दिन का उल्लेख नहीं किया नहीं है।

हालांकि, कुछ तिथि और दिनांक समय रूपांतरण कार्यों, जैसे, ymd(), parse_date_time(), lubridate पैकेज में एक पैरामीटर truncated पहचान अधूरा तिथियों की पार्सिंग के लिए अनुमति देने के लिए:

yrs <- c(2001, 2002, 2002, 2002, 2003, 2005) 
lubridate::ymd(yrs, truncated = 2L) 
[1] "2001-01-01" "2002-01-01" "2002-01-01" "2002-01-01" "2003-01-01" "2005-01-01" 

वैध दिनांक बनाने के लिए वर्ष 1 जनवरी तक पूरा कर लिया गया है। परिणाम Date वर्ग का है।

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