2014-09-05 17 views
5

के बाद .txt-file से लाइनें पढ़ना मेरे पास आउटपुट .txt-files का एक गुच्छा है जिसमें एक बड़ी पैरामीटर सूची और एक्स-वाई-समन्वय सेट होता है। मुझे इन निर्देशांकों को सभी फाइलों से निकालने की ज़रूरत है ताकि केवल वे लाइनें वेक्टर में आयात की जाएंगी। यहआर - एक विशिष्ट लाइन

impcoord<-read.table("file.txt",skip= ,nrow= ,...) 

के साथ ठीक काम करेगा लेकिन फाइलें सहायक पैरामीटर की विभिन्न लंबाई के बाद समन्वय सेट प्रिंट करती हैं।

सौभाग्य से समन्वय हमेशा कुछ शब्दों वाले रेखा के बाद शुरू होते हैं।

इस प्रकार मेरा सवाल यह है कि, मैं इन शब्दों के बाद .txt-file को कैसे पढ़ूं? मान लें कि वे हैं:

coordinatesXY 

आपके समय और सहायता के लिए बहुत बहुत धन्यवाद!

-Olli

--Edit--

भ्रम के लिए खेद है।

फ़ाइल के भाग इस प्रकार है:

##XYDATA= (X++(Y..Y)) 
131071 -2065 
131070 -4137 
131069 -6408 
131068 -8043 
...  ... 
...  ... 

प्रथम पंक्ति है जहां skip खत्म होना चाहिए और निम्नलिखित निर्देशांक एक सदिश करने के लिए आयात करने के लिए की जरूरत है। आप देख सकते हैं एक्स निर्देशांक 131,071 से शुरू करने और 0.

+1

उस फ़ाइल के लिए और भी कुछ है, मेरी पोस्ट से आपकी समस्या ने '## END =' के साथ शुरू की गई रेखा का उल्लेख किया है, यह लाइन निर्देशांक लाइनों के बाद है? – JeremyS

+0

यह है। शायद मुझे पैरामीटर लाइन में 'nrow = 'शामिल करना चाहिए? –

उत्तर

6

1) read.patternread.pattern gsubfn में एक विशिष्ट पैटर्न से मेल खाने वाली रेखाओं को पढ़ने के लिए उपयोग किया जा सकता है। इस उदाहरण में हम लाइन, वैकल्पिक स्थान (1), 1 या अधिक अंक, 1 या अधिक रिक्त स्थान, 1 या उससे अधिक अंकों, वैकल्पिक स्थान (ओं), लाइन के अंत के बाद वैकल्पिक माइनस से मेल खाते हैं। Regexp के कोष्ठक वाले हिस्सों से मेल खाने वाले भाग डेटा.फ्रेम में कॉलम के रूप में लौटाए जाते हैं। text = Lines इस स्वयं निहित उदाहरण में "myfile.txt" के साथ प्रतिस्थापित किया जा सकता है, कहें, यदि डेटा किसी फ़ाइल से आ रहा है। सूट के लिए पैटर्न संशोधित करें।

Lines <- "junk 
junk 
##XYDATA= (X++(Y..Y)) 
131071 -2065 
131070 -4137 
131069 -6408 
131068 -8043" 

library(gsubfn) 
DF <- read.pattern(text = Lines, pattern = "^ *(\\d+) +(-?\\d+) *$") 

दे रही है:

> DF 
     V1 V2 
1 131071 -2065 
2 131070 -4137 
3 131069 -6408 
4 131068 -8043 

2) केवल आधार आर का उपयोग कर दो बार पढ़ एक और संभावना है बस है इसे एक बार पढ़ने के लिए skip= के मूल्य और का उपयोग कर वास्तविक पढ़ने करने के लिए एक दूसरी बार निर्धारित करने के लिए वह मूल्य फ़ाइल myfile.txt से पढ़ने के लिए text = Lines और textConnection(Lines)"myfile.txt" के साथ प्रतिस्थापित करें।

read.table(text = Lines, 
    skip = grep("##XYDATA=", readLines(textConnection(Lines)))) 

जोड़ा गया कुछ संशोधन और दूसरा दृष्टिकोण गयी।

+0

आपके उत्तर के लिए धन्यवाद। आपकी दूसरी विधि अच्छी तरह से काम किया! –

4

यह data.table के fread

library(data.table) 
impcoord <- fread("file.txt",skip="coordinatesXY") 

--edit--

के लिए एक नौकरी की तरह दिखता है यही कारण है कि यह करने के लिए अंत एक प्रतिलिपि उदाहरण देने के लिए अच्छा है। उस त्रुटि का मतलब है कि आपकी फाइल परेशानी पैदा कर रही है।

स्किप कमांड उस पाठ से मेल खाता है जिसे आप फाइल को देते हैं, यह पहचानने के लिए कि किस लाइन को शुरू करना है, इसलिए आपको उस लाइन की शुरुआत से एक अनूठी स्ट्रिंग देना होगा जिसे आप पढ़ना शुरू करना चाहते हैं। यही कारण है कि समारोह के लिए कुछ इस तरह काम करेगा: जब आप सूचक स्ट्रिंग को खोजने

 conn<-file("file.txt",open="rt") 
    x<-TRUE 
    while (x) 
     {x<-!grepl("coordinatesXY",readLines(conn,n=1))} 
    ret<-read.table(conn,...) #insert additional parameters to read.table 
    close(conn) 

आप इनपुट फ़ाइल से समय में एक लाइन पढ़ सकते हैं और बंद करो:

## some random text 
## some more random text 
## More random text 
table_heading1, table_heading2, table_heading3 ...etc 
value1, value2, value3 ... etc 
etc 

Just_The_Table <- fread("the_above_as_a_text_file.txt", skip="table_heading1", header=T) 
+0

आपके उत्तर के लिए धन्यवाद! हालांकि, यह दृष्टिकोण टाइपों को पहचानते समय लाइन 2 पर एक त्रुटि 'फ़ील्ड 1 देता है: ## END = 'चाहे जो भी मूल्य या नामांकनकर्ता मैं' skip =' में देता हूं। –

+0

फ़ाइल विशिष्ट लगता है, फ़्रेड स्किप कैसे काम करता है इसके उदाहरण के लिए मेरे उत्तर में संपादन देखें। – JeremyS

1

एक संभव दृष्टिकोण निम्नलिखित हो सकता है । फिर आप फ़ाइल को read.table के माध्यम से पढ़ते हैं। इस दृष्टिकोण के साथ आप पूरी फ़ाइल को स्मृति में संग्रहीत नहीं करते हैं, लेकिन केवल आपको आवश्यक टुकड़ा।

+0

आपके उत्तर के लिए धन्यवाद! –

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