आर

2012-10-07 19 views
5

में read.table और टिप्पणियां मैं अपनी स्प्रेडशीट में टिप्पणियों के रूप में मेटाडेटा जोड़ना चाहता हूं, और आर को इन्हें बाद में अनदेखा करना है।आर

मेरे डेटा (स्तंभों की संख्या निर्धारित करने के लिए जो अपवाद है कि यह बहुत लंबे समय तक है। पहली टिप्पणी वास्तव में अच्छी तरह से शीर्ष 5 पंक्तियों के बाहर दिखाई देता है, scan द्वारा प्रयुक्त) प्रपत्र

v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 

के हैं

मैं कोशिश कर दिया गया है:

read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#") 

लेकिन read.table (और, उस बात के लिए, count.fields) सोचता है मेरे पास वास्तव में ऐसा करने से एक और क्षेत्र है। मेरा डेटा फ्रेम 'एक्स' नामक रिक्त कॉलम के साथ समाप्त होता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरा स्प्रेडशीट प्रोग्राम कॉमा को प्रत्येक पंक्ति के अंत में जोड़ता है (जैसा उपर्युक्त उदाहरण में है)।

flush=TRUE का उपयोग करते हुए कोई प्रभाव नहीं है, यहां तक ​​कि (मदद फ़ाइल के अनुसार), हालांकि यह "[...] पिछले क्षेत्र के बाद टिप्पणी डालने की अनुमति देता है [...]"

का उपयोग colClasses=c(rep(NA,3),NULL) या तो कोई प्रभाव नहीं है।

मैं बाद में कॉलम को हटा सकता था, लेकिन ऐसा लगता है कि यह एक आम प्रथा है जिसे मैं सीखना चाहता हूं कि इसे ठीक से कैसे किया जाए।

धन्यवाद,

एंड्रयू

उत्तर

4

टिप्पणी चरित्र और डेटा स्तंभों की संख्या के बारे में अपने मुद्दे read.table से संबंधित नहीं(), लेकिन अपनी स्प्रेडशीट (मैं Excel का उपयोग कर रहा) के लिए नहीं कर रहे हैं। Read.table के लिए डिफ़ॉल्ट व्यवहार # टिप्पणी की शुरुआत के रूप में व्यवहार करना है और निम्नानुसार अनदेखा करना है। आपको त्रुटि मिलने का कारण यह है कि आपकी डेटा लाइनों के अंत में पिछली कॉमा है। यह read.table बताता है कि अधिक डेटा का पालन करना चाहिए।

> read.table(text="v1, v2, v3, 
+ 1,5,7, 
+ 4,2,1,#possible error,", sep=",", header=TRUE) 
    v1 v2 v3 X 
1 1 5 7 NA 
2 4 2 1 NA 

टिप्पणी डिफ़ॉल्ट रूप से नजरअंदाज कर दिया है और एक चौथे स्तंभ बनाई गई है और लेबल एक्स आप आसानी से इस तथ्य के बाद इस स्तंभ को हटाने या विधि कि @flodel का उल्लेख है का उपयोग करें या आप निकाल सकते हैं सकता है: अपने मूल उदाहरण पढ़ना फ़ाइल में आर पढ़ने से पहले पीछे की ओर अल्पविरामएक्सेल में, पिछली कॉमा को तब जोड़ा जाता है जब आप फ़ाइल को सीएसवी (अल्पविराम से अलग चर) के रूप में सहेजते हैं क्योंकि टिप्पणी चौथे कॉलम में दिखाई देती है और एक्सेल इसे टिप्पणी के रूप में नहीं पहचानता है। यदि आप फ़ाइल को अलग-अलग स्थान से अलग करते हैं, तो समस्या दूर हो जाती है (सीईपी = तर्क हटा दें क्योंकि स्थान डिफ़ॉल्ट विभाजक है):

> read.table(text="v1 v2 v3 
+ 1 5 7 
+ 4 2 1#possible error", header=TRUE) 
    v1 v2 v3 
1 1 5 7 
2 4 2 1 
5

डॉक से (?read.table):

colClasses चरित्र। स्तंभों के लिए कक्षाओं का एक वेक्टर माना जाना चाहिए। आवश्यकतानुसार पुनर्नवीनीकरण, या यदि चरित्र वेक्टर का नाम दिया गया है, तो अनिर्दिष्ट मान NA होने के लिए लिया जाता है।

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

नोट यह "NULL", नहीं NULL उपयोग करने के लिए कहा गया है कि। दरअसल, इस के रूप में की उम्मीद काम करता है:

con <- textConnection(" 
v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 
") 

read.table(con, header = TRUE, sep = ",", 
      stringsAsFactors = FALSE, comment.char = "#", 
      colClasses = c(rep(NA, 3), "NULL")) 
# v1 v2 v3 
# 1 1 5 7 
# 2 4 2 1