2012-08-28 9 views
5

मैं एक चरित्र के रूप में वर्ष सप्ताह प्रारूप में की तारीख से स्ट्रिंग है:आर - साथ सप्ताह साल चरित्र स्ट्रिंग: सप्ताह जब तिथि प्रारूप में परिवर्तित खो दिया है

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", "2002-30", "2002-31") 

हालांकि, तिथि करने के लिए इस चरित्र परिवर्तित सप्ताह पहचानकर्ता का नुकसान वर्ग के परिणाम:

> as.Date(weeks.strings, format="%Y-%U") 
[1] "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28" "2002-08-28" 
[6] "2002-08-28" 

ऊपर दिखाया गया है, प्रारूप साल आज की तारीख के साथ concatenated, तो मूल सप्ताह के बारे में किसी भी जानकारी के लिए खो दिया है (पूर्व में बदल जाता है - जब प्रारूप समारोह का उपयोग कर या मूल स्वरूप में वापस प्रयास करने और मजबूर करने के लिए समय।

एक समाधान मैं एक सहायता समूह में पाया सप्ताह के दिन निर्दिष्ट करने के लिए है:

as.Date(weeks.strings, format="%Y-%u %U") 
[1] "2002-02-12" "2002-02-19" "2002-02-26" "2002-03-05" "2002-01-02" 
[6] "2002-01-09" 

लेकिन यह इस तरह गलत सप्ताह नंबरिंग (मूल स्ट्रिंग से मेल नहीं खाता) में जो परिणाम लग रहा है।

किसी भी मार्गदर्शन की सराहना की जाएगी।

+0

तिथियों के पास सप्ताह का पहचानकर्ता नहीं है ... क्या आप आउटपुट को उम्मीद कर सकते हैं? –

+0

यहोशू - मेरे पास प्रत्येक साप्ताहिक डेटा बिंदु से संबंधित मूल्य है। मैं सप्ताह बनाम मूल्य प्लॉट करने में सक्षम होना चाहता हूं, इसलिए डेटा ऑब्जेक्ट के रूप में डेटा को बनाए रखने के लिए मेरे लिए महत्वपूर्ण है। अपेक्षित आउटपुट मूल वर्ण स्ट्रिंग के समान है, लेकिन कक्षा की तारीख के समान है। – zzk

उत्तर

9

तुम बस आदेश दिनांक स्पष्ट करने के लिए (Jim Holtman's answer on R-help से अनुकूलित) में अपने weeks.strings करने के लिए एक काम करने के दिन जोड़ने की जरूरत है। कुछ बिंदु पर - - चुना काम करने के दिन वर्ष के पहले/पिछले सप्ताह में मौजूद नहीं होगा

as.Date(paste(weeks.strings,1),"%Y-%U %u") 

के रूप में टिप्पणी में कहा, दिनांक वर्ग नहीं उचित यदि दिनांक एक लंबे क्षितिज अवधि वजह से है । उस स्थिति में आप एक संख्यात्मक वेक्टर का उपयोग कर सकते हैं जहां पूरा हिस्सा वर्ष है और दशमलव भाग सप्ताह/वर्ष का अंश है। उदाहरण के लिए:

wkstr <- sprintf("%d-%02d", rep(2000:2012,each=53), 0:52) 
yrwk <- lapply(strsplit(wkstr, "-"), as.numeric) 
yrwk <- sapply(yrwk, function(x) x[1]+x[2]/53) 
+0

+1 बहुत चालाक। –

+0

यह वही है जो मैं खोज रहा था, धन्यवाद! – zzk

+0

दुर्भाग्य से मुझे इस विधि के साथ एक त्रुटि मिली। इस चरण को लागू करने के बाद एनए के रूप में "2003-00" पूर्व में सप्ताह 00 के साथ एक स्ट्रिंग। यद्यपि शायद पहली जगह में त्रुटि 0 सप्ताह में है? – zzk

4

जाहिर है, कोई अनूठा समाधान नहीं है, क्योंकि प्रत्येक सप्ताह 7 अलग-अलग तिथियों में से किसी एक का प्रतिनिधित्व किया जा सकता है। जैसा कि कहा गया है, यहाँ एक विचार है:

weeks.strings <- c("2002-26", "2002-27", "2002-28", "2002-29", 
        "2002-30", "2002-31") 

x <- as.Date("2002-1-1", format="%Y-%m-%d") + (0:52*7) 
x[match(weeks.strings, format(x, "%Y-%U"))] 
# [1] "2002-07-02" "2002-07-09" "2002-07-16" "2002-07-23" 
# [5] "2002-07-30" "2002-08-06" 
+0

मुझे परवाह नहीं है कि सप्ताह के किस दिन को निर्दिष्ट किया गया है, जब तक कि यह लगातार हो। मैं सिर्फ साप्ताहिक डेटा की आवृत्ति साजिश करना चाहता हूं। – zzk

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

  • कोई संबंधित समस्या नहीं^_^