2015-05-06 11 views
5

के सप्ताह मैं strtoi का उपयोग निम्नलिखित समारोह में वर्ष की सप्ताह निर्धारित करने के लिए प्राप्त करने के लिए:आर - strtoi अजीब व्यवहार साल

to.week <- function(x) strtoi(format(x, "%W")) 

यह सबसे दिनांकों ठीक काम करता है:

> to.week(as.Date("2015-01-11")) 
[1] 1 

हालांकि,

> to.week(as.Date("2015-02-25")) 
[1] NA 
: जब मैं 2015-02-23 और 2015-03-08 के बीच तारीखों कोशिश कर रहा हूँ, मैं एक परिणाम के रूप NA मिल 0

क्या आप कृपया मुझे बता सकते हैं कि समस्या का कारण क्या है?

+0

@ rmuc8, काफी नहीं इस के बाद से नहीं बल्कि इसे कैसे करना से, क्यों अपने दृष्टिकोण काम नहीं करता है पूछ रहा है कर सकते हैं सामान्य रूप से। – BrodieG

उत्तर

6

यहाँ एक कार्यान्वयन है कि काम करता है:

to.week <- function(x) as.integer(format(x, "%W")) 

कारण strtoi विफल रहता है डिफ़ॉल्ट यह संख्या की व्याख्या करने के रूप में यदि वे अष्टाधारी थे, जब वे एक "0" द्वारा preceeded कर रहे हैं की कोशिश करता रहा है। चूंकि "%W""08" लौटाता है, और 8 ऑक्टल में मौजूद नहीं है, तो आपको NA प्राप्त होता है। दिए गए आधार के अनुसार सी नियमों का पालन सी समारोह strtol का उपयोग कर, या एक उपयुक्त आधार चुनें पूर्णांकों को

Convert तार: ?strtoi से।

...

दशमलव तार as.integer समान रूप से उपयोगी है के लिए।

इसके अलावा, आप उपयोग कर सकते हैं:

week(as.Date("2015-02-25")) 

हालांकि आप अपनी अपेक्षाओं से 1 से इस बात का परिणाम ऑफसेट करने के लिए हो सकता है।

+0

स्पष्टीकरण के लिए धन्यवाद। – paljenczy

+2

आप स्पष्टीकरण मेरे लिए अधूरा लगता है। यह तथ्य है कि स्वरूप से परिणामस्वरूप एक अग्रणी '0" 'है। दिनांक जो समस्याओं का कारण बनता है। 'प्रारूप (as.Date (" 2010-02-26 "),"% डब्ल्यू ") [1]" 08 "'। फ़ंक्शन 'स्ट्रॉटी' दशमलव 8 के रूप में "10" की व्याख्या नहीं करता है। –

+0

@ बॉन्डडडस्ट, आप सही हैं, अपडेट हो जाएंगे। – BrodieG

4

आप थोड़ा इस

to.week <- function(x) strtoi(format(x, "%W"), 10) 

की तरह अपने कोड को संशोधित करने और आधार का उपयोग 10

+0

धन्यवाद, यह जानना उपयोगी है! – paljenczy

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