2016-06-08 3 views
5

मैं यह नहीं समझ सकता कि Sys.Date() को YYYYDDD प्रारूप में किसी संख्या में कैसे बदलना है। ,किसी तारीख को YYYYDDD में कैसे परिवर्तित करें?

Date <- Sys.Date  
df$Month_Yr <- format(as.Date(df$Date), "%Y%d") 

लेकिन: जहां DDD वर्ष का दिन है, यानी जनवरी 1 होगा 2,016,001 दिसंबर 31 2016365

Date <- Sys.Date() ## The Variable Date is created as 2016-01-01 
SomeFunction(Date) ## Returns 2016001 
+0

@ कैट्या-हैंडलर मूल रूप से हर दूसरे प्रारूप (तिथि,) समारोह,% का एहसास नहीं था जे अस्तित्व में था। यदि अन्य मौजूद हैं तो मुझे पता होना अच्छा लगेगा, इस साइट का संदर्भ दे रहा था: [लिंक] (http://www.statmethods.net/input/dates.html) – LanceS

+1

दस्तावेज में 'प्रारूप' अनुभाग [' as.Date'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html) ['strptime'] के प्रासंगिक दस्तावेज़ों से लिंक (https: //stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html) जहां सभी दिनांक-समय रूपांतरण विनिर्देश सूचीबद्ध हैं। – RHertel

उत्तर

6

इस प्रकार तुम बस format फ़ंक्शन का उपयोग कर सकते हैं:

format(Date, '%Y%j') 

जो देता है:

[1] "2016161" "2016162" "2016163" 

आप अन्य तरीकों से यह फ़ॉर्मेट करने के लिए, सभी संभव विकल्पों के लिए ?strptime देखें।

वैकल्पिक रूप से, आप data.table या lubridate संकुल से year और yday कार्यों का उपयोग और उन्हें paste0 के साथ एक साथ पेस्ट कर सकते हैं:

library(data.table) # or: library(lubridate) 
paste0(year(Date), yday(Date)) 

जो आप एक ही परिणाम दे देंगे।


दोनों विकल्पों द्वारा लौटाए गए मान वर्ग चरित्र के हैं। वास्तविक संख्या प्राप्त करने के लिए उपरोक्त समाधान as.numeric() में लपेटें।


प्रयुक्त डेटा:

> Date <- Sys.Date() + 1:3 
> Date 
[1] "2016-06-09" "2016-06-10" "2016-06-11" 
> class(Date) 
[1] "Date" 
+0

इतना आसान है। अनेक अनेक धन्यवाद। – LanceS

+0

शायद मुझे सीखने में मदद करने के लिए एक गहन सवाल: आप कैसे जानते थे कि% j मौजूद है? मैं कहीं और इस पर नहीं आया था। – LanceS

+1

@LanceScadden '? Strptime' – Jaap

1

यह निर्धारित तिथि प्रारूप के साथ एक नया स्तंभ बनाने के लिए काम करना चाहिए होगा विशेष रूप से जब बड़े डेटा सेट के साथ काम करना आसान होता है, तो निम्नलिखित करना आसान होता है:

library(data.table) 
setDT(df)[,NewDate := format(as.Date(Date), "%Y%d" 

आशा है कि इससे मदद मिलती है। यदि आप केवल एक मान चाहते हैं और डेटा सेट के साथ काम नहीं कर रहे हैं तो टिंकर करना होगा।

+1

@mtoto का एक अच्छा, सरल जवाब है अगर केवल उस विशिष्ट मूल्य की तलाश में है। –

3

यहाँ lubridate साथ एक ही विकल्प है:

library(lubridate) 
x <- Sys.Date() 
#[1] "2016-06-08" 
paste0(year(x),yday(x)) 
#[1] "2016160" 
संबंधित मुद्दे