2010-12-14 15 views
5

सेट करना दो पंक्तियों के साथ एक एक्सटीएस ऑब्जेक्ट बनाएं।एक एक्सटीएस इंडेक्स

library(xts) 
junk<-xts(c(1,2),as.Date(c("2010-01-01","2010-05-01"))) 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

निम्नलिखित पंक्ति के लिए निम्नलिखित सूचकांक क्यों नहीं बदलता है?

time(junk[1])<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

मुझे एहसास है कि निम्नलिखित कार्य करता है, लेकिन उपरोक्त काम क्यों नहीं करता है?

time(junk)[1]<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-02-01 1 
> 2010-05-01 2 

धन्यवाद,
विधेयक

उत्तर

2

समय श्रृंखला में तारीखों के साथ "[" संदर्भित नहीं हैं। वे डेटा फ्रेम में rownames की तरह हैं। वे विशेषता सूची के "सूचकांक" पत्ते में संग्रहित होते हैं। इसके अलावा, वे दिनांक वर्ग की नही है बल्कि दिनांक समय वर्ग ताकि आप करने की आवश्यकता का उपयोग कर सकते POSIXct:

> attributes(junk)$index[1] <- as.POSIXct("2010-02-01") 
> junk 
      [,1] 
2010-02-01 1 
2010-05-01 2 

संपादित करें: अधिक सही विशेषता $ सूचकांक सेकंड में आंतरिक रूप से है, लेकिन समय विधि होगा विभिन्न असाइनमेंट कक्षाओं को स्वीकार करें। क्योंकि subsetting एक नई वस्तु बनाता है

+0

मुझे याद होगा कि विशेषताएँ कार्य करती हैं। मैं अभी भी उन तरीकों ("समय <-") चीज़ पर काम कर रहा हूं। क्या मेरे लिए .POSIXct() के बजाय .Date() के रूप में उपयोग करना एक अच्छा विचार है? मेरा अधिकांश समय डेटा दैनिक या मासिक डेटा होगा (मिनट और दूसरी आवश्यकताएं दुर्लभ हैं, लेकिन संभव है)। –

+0

इस मामले में इसकी आवश्यकता नहीं है, क्योंकि एक समय <- फ़ंक्शन है। इसका मतलब है कि ऑब्जेक्ट की कक्षा को पहले मूल्यांकन किया गया है और जब कक्षा की तारीख है कि यह 24 * 60 * 60 तक ठीक से गुणा हो जाएगा और सेकंड में मौजूद आंतरिक प्रतिनिधित्व में भरने से पहले ऑफ़सेट लागू किया जाएगा। –

2
time(junk[1]) <- as.Date("2010-02-01") 

ऊपर junk की पहली पंक्ति के सूचकांक परिवर्तन नहीं करता है - junk --और time<-.xts के लिए कोई संदर्भ के साथ नई वस्तु के सूचकांक बदल देता है।

+2

एक समय <-। Xts विधि के अलावा। यह दिखाई नहीं दे रहा है लेकिन विधियों ('समय <-') के साथ दिखाता है। –

+0

@Dwin अच्छी पकड़। मैं 'समय 'देख रहा था, न कि' समय <-'। बिस्तर से ठीक पहले पोस्ट करने के लिए मुझे यही मिलता है। –

+0

यह समझ में आता है। इसके अलावा, उस समय (जंक) [1] कथन (कोड का अंतिम हिस्सा), एक नया सबसेट ऑब्जेक्ट बनाया गया है जो संदर्भ जंक है? और, उस संदर्भ जंक को संशोधित करने के लिए मजबूर करता है? –

7

पोस्ट का सीधा जवाब यह है कि जादू attr<- के अंदर है क्योंकि जोश कहते हैं। ऑब्जेक्ट को सब्सक्राइब करना सबसे पहले एक नई ऑब्जेक्ट बनाता है जो तुरंत < - एक बार समाप्त हो जाता है।

इसके अलावा आप .index() फ़ंक्शन के माध्यम से इंडेक्स के 'आंतरिक' देख सकते हैं। अनिवार्य रूप से एक डबल या पूर्णांक का वेक्टर जो POSIXct समय पर मानचित्र करता है - कुछ विशेषताओं को संलग्न करता है। जिस वर्ग को आप असाइन कर रहे हैं वह स्वचालित रूप से आगे और आगे बढ़ता है। यह आंतरिक को बनाए रखने में आसान बनाता है - और आपको किसी भी समय कक्षा के साथ चीजों को करने की सुविधा देता है।

सामान्य रूप से, तिथि टीजेड और सेकंड को मिश्रण से परेशान रखने का सबसे साफ तरीका होगा, लेकिन ध्यान रखें कि इस छिपे हुए पहलू की लागत index() है। आपको उस ऑब्जेक्ट को फिर से बनाना होगा जिसे आप उम्मीद करते हैं।

+0

स्टैक ओवरफ्लो में आपका स्वागत है, जेफ! – Shane

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