2011-12-05 12 views
6

आज मैंने अंततः आर के सीधी सीखने की वक्र पर चढ़ने का फैसला किया है। मैंने कुछ घंटों बिताए हैं और मैंने अपना डेटासेट आयात करने और कुछ अन्य बुनियादी चीजें करने में कामयाब रहा, लेकिन मुझे डेटा प्रकार: में एक कॉलम है जिसमें दशमलव को पूर्णांक के रूप में आयात किया जाता है, और रूपांतरणों को डबल में बदलने के लिए मानसीएसवी फ़ाइल आयात करने/पूर्णांक से कनवर्ट करने में समस्याएं

यहाँ एक उदाहरण मुझे पता चला कि समस्या केवल तब होता है जब डेटा फ़ाइल बहुत बड़ी है के रूप में डाल करने के लिए एक छोटा सा csv फ़ाइल प्राप्त करने की कोशिश में (अपने मूल फ़ाइल एक मैट्रिक्स 12 से 1,048,418 है, लेकिन फिर भी "केवल के साथ "5000 पंक्तियों में मुझे एक ही समस्या है। जब मेरे पास केवल 100, 1000 या 2000 पंक्तियां होती हैं तो कॉलम को डबल के रूप में सही तरीके से आयात किया जाता है)।

Here एक छोटा डेटासेट (अभी भी 500kb है, लेकिन फिर, यदि डेटासेट छोटा है तो समस्या को दोहराना नहीं है)। कोड

है
> ex <- read.csv("exampleshort.csv",header=TRUE) 
> typeof(ex$RET) 
[1] "integer" 

क्यों है रिटर्न के स्तंभ पूर्णांक के रूप में जब फ़ाइल बड़ी है, जब यह स्पष्ट रूप से प्रकार की दोहरी है आयात किया जा रहा?

सबसे बुरी बात यह है कि अगर मैं इसे दोगुना करने के लिए बदलने की कोशिश, मूल्यों बदल रहे हैं

> exdouble <- as.double(ex$RET) 
> typeof(exdouble) 
[1] "double" 

> ex$RET[1:5] 
[1] 0.005587 -0.005556 -0.005587 0.005618 -0.001862 
2077 Levels: -0.000413 -0.000532 -0.001082 -0.001199 -0.0012 -0.001285 -0.001337 -0.001351 -0.001357 -0.001481 -0.001486 -0.001488 ... 0.309524 

> exdouble[1:5] 
[1] 1305 321 322 1307 41 

यह केवल स्तंभ हैं जो गलत आयात किया जाता है नहीं है, लेकिन मैं समझ है कि अगर मैं के लिए एक समाधान खोजने के एक कॉलम, मैं दूसरे को सॉर्ट करने में सक्षम होना चाहिए।

> sapply(ex,class) 
PERMNO  DATE COMNAM  SICCD  PRC  RET  RETX SHROUT VWRETD VWRETX EWRETD EWRETX 
"integer" "integer" "factor" "integer" "factor" "factor" "factor" "integer" "numeric" "numeric" "numeric" "numeric" 

वे इस क्रम में होना चाहिए:: यहाँ कुछ और जानकारी है पूर्णांक, तिथि, स्ट्रिंग, पूर्णांक, डबल, डबल, डबल, पूर्णांक, डबल, डबल, डबल, डबल (प्रकार शायद गलत कर रहे हैं, लेकिन उम्मीद है कि आपको मेरा मतलब मिल जाएगा)

+0

@Xu वांग: पहली छमाही काम नहीं करेगा।इसे पहले 5 हजार अवलोकनों में काटकर, मेरे डेटा का 1% से भी कम, पहले से ही समस्याएं पैदा करता है ... – Vivi

+0

खेद है कि मैंने अपनी टिप्पणी पूरी नहीं की क्योंकि मैं गया और 'read.csv' मदद पढ़ी। मैं जो कहना चाहता था वह था कि मैंने सोचा कि शायद कुछ अजीब मूल्य थे जो 'आर' उलझन में थे। इसलिए मैंने सोचा कि यह बड़ा या छोटा नहीं है बल्कि बड़े डेटासेट में उन भ्रमित पात्रों या मूल्यों में से एक है। क्या इसका कोई मतलब है? यदि नहीं, तो इससे कोई फर्क नहीं पड़ता। मुझे लगता है कि समाधान colClasses तर्क का उपयोग करना है। –

+0

@Xu वैंग मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन मुझे अभी भी पूरी तरह से यकीन नहीं है कि मेरी समस्या का समाधान कैसे करें। मैं colClasses तर्क का उपयोग कैसे करूं? क्या आप collasses तर्क का उपयोग करके इस फ़ाइल को सही तरीके से आयात करने के लिए मुझे एक लाइन कमांड दे पाएंगे? – Vivi

उत्तर

6

read.csv: ?read.csv के लिए सहायता देखें।

colClasses: character. A vector of classes to be assumed for the 
      columns. Recycled as necessary, or if the character vector 
      is named, unspecified values are taken to be ‘NA’. 

      Possible values are ‘NA’ (the default, when ‘type.convert’ is 
      used), ‘"NULL"’ (when the column is skipped), one of the 
      atomic vector classes (logical, integer, numeric, complex, 
      character, raw), or ‘"factor"’, ‘"Date"’ or ‘"POSIXct"’. 
      Otherwise there needs to be an ‘as’ method (from package 
      ‘methods’) for conversion from ‘"character"’ to the specified 
      formal class. 

      Note that ‘colClasses’ is specified per column (not per 
      variable) and so includes the column of row names (if any). 

अपने प्रयास आर यह मुश्किल है, लेकिन इतना मज़ा जानने के लिए आप अतीत पहले कुछ चरणों (जो मैं कुछ समय लेते स्वीकार करते हैं) के बाद के साथ गुड लक: यहाँ प्रासंगिक अनुभाग है।

इस कोशिश करते हैं और उसके अनुसार दूसरों को ठीक: BenBolker बताते हैं के रूप में

ex <- read.csv("exampleshort.csv",header=TRUE,colClasses=c("integer","integer","factor","integer","numeric","factor","factor","integer","numeric","numeric","numeric","numeric"), na.strings=c(".")) 

, colClasses तर्क शायद जरूरत नहीं है। हालांकि, ध्यान दें कि colClasses तर्क का उपयोग ऑपरेशन को तेजी से कर सकता है, खासकर बड़े डेटासेट के साथ।

na.strings निर्दिष्ट होना चाहिए। ?read.csv में निम्न अनुभाग देखें:

na.strings: a character vector of strings which are to be interpreted 
     as ‘NA’ values. Blank fields are also considered to be 
     missing values in logical, integer, numeric and complex 
     fields. 
संदर्भ उद्देश्यों के लिए

(क्योंकि सबसे अच्छा समाधान एक कदम में सही ढंग से डेटा आयात करने के लिए है इस समाधान के रूप में नहीं किया जाना चाहिए): RET एक पूर्णांक के रूप में आयात नहीं किया था। इसे factor के रूप में आयात किया गया था। भविष्य में संदर्भ के लिए, यदि आप एक numeric करने के लिए एक factor परिवर्तित करना चाहते हैं, का उपयोग

new_RET <-as.numeric(as.character(ex$RET))

+0

मैंने मदद के इस हिस्से को पढ़ा था, लेकिन मैं ईमानदारी से यह नहीं समझता कि इसका क्या अर्थ है (मैंने केवल आर का उपयोग करना शुरू कर दिया है)। उस कॉलम में केवल वे मान हैं जो या तो 0 या डबल हैं, और इसमें कोई गुम मूल्य नहीं है। – Vivi

+0

आह, ठीक है। आपके डेटासेट में अन्य कॉलम क्या हैं? क्या वे ठीक आयात करते हैं? क्या आप 'sapply (ex, class) 'के आउटपुट पोस्ट कर सकते हैं। –

+0

मैंने आपके प्रश्न के अंत में आपके द्वारा अनुरोध की गई जानकारी को जोड़ा – Vivi

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