2013-07-02 6 views
5

मेरे पास चिड़ियाघर में कॉलम नामों पर एक प्रश्न है। मैं आमतौर पर डेटा फ्रेम से चिड़ियाघर ऑब्जेक्ट्स बनाता हूं, और मैं डेटा फ्रेम से स्तंभ (ओं) को चिड़ियाघर कॉलम चुनता हूं। जो मैंने पाया वह यह है कि, यदि मैं चिड़ियाघर ऑब्जेक्ट में केवल एक कॉलम निर्दिष्ट करता हूं, तो कॉलम नाम चिड़ियाघर द्वारा नहीं लिया जाएगा। क्या इसका मतलब है कि इसे चिड़ियाघर में "कॉलम" नहीं माना जाता है?एकल कॉलम ऑब्जेक्ट के लिए चिड़ियाघर कॉलम नाम

यहां एक उदाहरण है कि मैं आमतौर पर इसे एक और दो कॉलम के साथ कैसे करता हूं।

> colnames(zx) 
NULL 
> colnames(zy) 
[1] "dbt" "rh" 

मैं कुछ याद आती है कार्य करें:

Lines.1 = "Index,dbt 
2008-08-20 15:03:18,88.74 
2008-08-20 15:08:18,88.74 
2008-08-20 15:13:18,86.56 
2008-08-20 15:18:18,85.82" 

Lines.2 = "Index,dbt,rh 
2008-08-20 15:03:18,88.74,18.25 
2008-08-20 15:08:18,88.74,17.25 
2008-08-20 15:13:18,86.56,18.75 
2008-08-20 15:18:18,85.82,19.75" 

x =read.table(text = Lines.1, header = TRUE, sep = ",") 
y =read.table(text = Lines.2, header = TRUE, sep = ",") 

colnames(x) 
colnames(y) 

library(zoo) 
zx = zoo(x[,2], as.POSIXct(x$Index, tz="GMT")) 
zy = zoo(y[,2:3], as.POSIXct(y$Index, tz="GMT")) 

colnames(zx) 
colnames(zy) 

परिणाम इस प्रकार पता चलता है?

उत्तर

4

यह [ के डिफ़ॉल्ट व्यवहार को जब सरणियों या डेटा फ्रेम के साथ प्रयोग किया जाता है, खाली आयाम गिराए गए हैं।

> x[, 2] 
[1] 88.74 88.74 86.56 85.82 
> class(x[,2]) 
[1] "numeric" 
> is.data.frame(x[,2]) 
[1] FALSE 

इस मामले 1-स्तंभ डेटा फ्रेम के बारे में जो स्तंभ यह है और इसलिए आर कि जानकारी चला जाता है और एक संख्यात्मक रूप में स्तंभ की सामग्री रिटर्न जानकारी की जरूरत नहीं है में वेक्टर (इस मामले में) पर विचार करें, जैसा कि ऊपर देखा जा सकता है। उस वेक्टर में colname विशेषता नहीं है और इसलिए चिड़ियाघर के साथ काम करने के लिए कुछ भी नहीं है।

एक समाधान

> zx <- zoo(x[, 2, drop = FALSE], as.POSIXct(x$Index, tz="GMT")) 
> zx 
         dbt 
2008-08-20 15:03:18 88.74 
2008-08-20 15:08:18 88.74 
2008-08-20 15:13:18 86.56 
2008-08-20 15:18:18 85.82 

में के रूप में सूचकांक x[, 2, drop = FALSE] में drop = FALSE का उपयोग यह देखने के लिए क्यों/यह कैसे काम करता,

> x[, 2, drop = FALSE] 
    dbt 
1 88.74 
2 88.74 
3 86.56 
4 85.82 
> is.data.frame(x[, 2, drop = FALSE]) 
[1] TRUE 

को देखो और colnames की कमी ध्यान दें जब डिफ़ॉल्ट (करने के लिए है TRUE) [ इंडेक्स में उपयोग किया जाता है:

> colnames(x[, 2, drop = FALSE]) 
[1] "dbt" 
> colnames(x[, 2, drop = TRUE]) 
NULL 

अब अधिक जानकारी के लिए ?'[' पढ़ें।

+0

धन्यवाद! मुझे नहीं पता कि कॉलम जटिल हो सकता है। खैर, यह स्पष्टीकरण के साथ अब सरल लगता है। – ery

5

यह व्यवहार zoo के कारण नहीं है। x[,2] डेटा फ्रेम नहीं बल्कि एक वेक्टर वापस नहीं करता है। इसलिए, कोई कॉलम और कोई कॉलम नाम नहीं हैं।

x[,2] 
[1] 88.74 88.74 86.56 85.82 

क्या आप अल्पविराम या x[,2, drop = FALSE] बिना x[2] उपयोग कर सकते हैं एक एक स्तंभ डेटा फ्रेम वापस जाने के लिए चाहते हैं।

x[2] 
    dbt 
1 88.74 
2 88.74 
3 86.56 
4 85.82 

x[,2, drop = FALSE] 
    dbt 
1 88.74 
2 88.74 
3 86.56 
4 85.82 

drop का डिफ़ॉल्ट मान TRUE है। इसका मतलब है कि एक कॉलम डेटा फ्रेम स्वचालित रूप से वेक्टर में परिवर्तित हो जाता है।

अब, यह काम करता है:

zx <- zoo(x[2], as.POSIXct(x$Index, tz="GMT")) 
colnames(zx) 
[1] "dbt" 
+0

धन्यवाद! एक्स [2] एक महान शोरकट है। – ery

+1

@ery बस सावधान रहें क्योंकि एक matrix/zoo ऑब्जेक्ट डेटा.फ्रेम से अलग है। 'zy [2] 'दूसरी पंक्ति का चयन करता है, दूसरा कॉलम नहीं। – GSee

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