2011-12-07 10 views
5

मुझे टेक्स्ट फ़ाइल के रूप में बहुत लंबा टेलीफोन लॉग मिला है और मैंने इसे आर में पढ़ने की कोशिश की है लेकिन यह वास्तव में काम नहीं कर रहा है। पाठ में एक संरचना है लेकिन यह निश्चित रूप से एक टेबल नहीं है। इसकी संरचना के रूप मेंजब डेटा तालिका में नहीं है, तो मैं आर में एक टेक्स्ट फ़ाइल कैसे पढ़ूं

  1. इस प्रकार प्रत्येक रिकॉर्ड कई पंक्तियों से बना है तो readLines नहीं बिल्कुल उचित है
  2. प्रत्येक रिकॉर्ड की प्रत्येक पंक्ति एक अलग क्षेत्र के
  3. कुछ रिकॉर्ड दूसरे क्षेत्र
  4. के बाद एक अतिरिक्त क्षेत्र है
  5. प्रत्येक नए रिकॉर्ड को रिक्त रेखा द्वारा नोट किया जाता है।

    : readLines या scan अगर एक निर्दिष्ट किया जा सकता था कि रिकॉर्ड द्वारा "\ n \ n" और उस क्षेत्र (या कॉलम) से अलग हो गए थे "\ n"

यहाँ एक उदाहरण है अलग हो गए थे काम किया है |

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:56 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 12:58 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 412552999 x 4999 
    bump phone line 4125527777 
    datetime 2011110516 12:59 
    blay blay blah who knows what 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    bump phone line 4125527777 
    datetime 2011110516 13:51 
    blay blay blah who knows what, but anyway it may have a comma 

TheInstitute 5467 
    telephone line 4125526987 x 4567 
    datetime 2011110516 14:56 
    blay blay blah who knows what 

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

उत्तर

14

scan फ़ंक्शन में multi.line = TRUE के साथ, एक रिकॉर्ड दो अंतराल के साथ समाप्त होना चाहिए। मैं अपनी फ़ाइल चारों ओर textConnection के साथ इस किया था, लेकिन आप एक वैध फ़ाइल नाम का प्रयोग करेंगे:

inp <- scan(textConnection(txt), multi.line=TRUE, 
      what=list(place="character", tline1="character", 
      cline1="character", cline2 ="character", cline3="character"), sep="\n") 
Read 5 records 
> str(as.data.frame(inp)) 
'data.frame': 5 obs. of 5 variables: 
$ place : Factor w/ 1 level "TheInstitute 5467": 1 1 1 1 1 
$ tline1: Factor w/ 2 levels " telephone line 4125526987 x 4567",..: 1 1 2 1 1 
$ cline1: Factor w/ 4 levels " bump phone line 4125527777",..: 2 3 1 1 4 
$ cline2: Factor w/ 4 levels " blay blay blah who knows what",..: 2 1 3 4 1 
$ cline3: Factor w/ 3 levels ""," blay blay blah who knows what",..: 1 1 2 3 1 
> as.data.frame(inp) 
       place        tline1 
1 TheInstitute 5467 telephone line 4125526987 x 4567 
2 TheInstitute 5467 telephone line 4125526987 x 4567 
3 TheInstitute 5467 telephone line 412552999 x 4999 
4 TheInstitute 5467 telephone line 4125526987 x 4567 
5 TheInstitute 5467 telephone line 4125526987 x 4567 
         cline1 
1 datetime 2011110516 12:56 
2 datetime 2011110516 12:58 
3 bump phone line 4125527777 
4 bump phone line 4125527777 
5 datetime 2011110516 14:56 
                  cline2 
1 blay blay blah who knows what, but anyway it may have a comma 
2         blay blay blah who knows what 
3          datetime 2011110516 12:59 
4          datetime 2011110516 13:51 
5         blay blay blah who knows what 
                  cline3 
1                 
2                 
3         blay blay blah who knows what 
4 blay blay blah who knows what, but anyway it may have a comma 
5                 
+0

+1 बहुत अच्छा ... – Andrie

+0

... लेकिन मैं आपको आगे की विभाजन 'place',' tline' जरूरत है लगता है और उप कॉलम में 'cline1'? – Tommy

+0

मुझे लगता है कि अगला कार्य 'डेटाटाइम' और 'बंप लाइन' डेटा के चारों ओर स्थानांतरित होना होगा, लेकिन मुझे नहीं लगता कि प्रश्नकर्ता टिप्पणियों को पार्स करने के लिए कह रहा था। –

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