2012-09-02 20 views
6

पर स्प्लिट स्ट्रिंग्स मैं readLines का उपयोग कर टेक्स्ट प्रारूप में डेटा फ़ाइलों को पढ़ रहा हूं। पहला 'कॉलम' जटिल टेक्स्ट है जिसकी मुझे आवश्यकता नहीं है। अगले कॉलम में डेटा होता है जो मुझे चाहिए। पहला 'कॉलम' और डेटा को कोलन द्वारा अलग किया जाता है (:)। मैं प्रत्येक पंक्ति को पहले कॉलन पर विभाजित करना चाहता हूं और केवल डेटा को रखने के परिणामस्वरूप टेक्स्ट स्ट्रिंग को हटाना चाहता हूं।पहले कॉलन

नीचे एक उदाहरण डेटा फ़ाइल है। एक संभावित जटिलता यह है कि डेटा की एक पंक्ति में कई कोलन होते हैं। वह रेखा किसी बिंदु पर मेरा हेडर बन सकती है। तो, मुझे शायद पहले कोलन में, हर कोलन में विभाजित नहीं होना चाहिए।

my.data <- "first string of text..: aa : bb : cc 
      next string ........ : 2 0 2 
      third string......1990: 7 6 5 
      last string   : 4 2 3" 

my.data2 <- readLines(textConnection(my.data)) 
my.data2 

मैं कोशिश की है कोड यहां प्रस्तुत:

Split on first comma in string

और यहाँ: पहले दिए गए लिंक पर

R: removing the last three dots from a string

कोड ऊपर के पहले पेट में ही विभाजित करने के लिए लगता है पहली पंक्ति दूसरे लिंक पर कोड शायद वही करेगा जो मैं चाहता हूं, लेकिन मेरे लिए सफलतापूर्वक इसे संशोधित करने के लिए बहुत जटिल है।

यहाँ डेटा मैं प्राप्त करने के लिए आशा है, और इस बिंदु पर मैं बस एक बहुत ही सरल gsub कथन का उपयोग खाली स्थान के साथ पहली पंक्ति में शेष कोलन की जगह ले सकता है:

aa : bb : cc 
    2 0 2 
    7 6 5 
    4 2 3 

क्षमा अगर यह डुप्लिकेट है एक पद के लिए मैंने कोई सलाह या सहायता के लिए स्थित नहीं है और धन्यवाद।

उत्तर

15

निम्नलिखित स्ट्रिंग की शुरुआत में शुरू कर देंगे और उसके बाद के लिए और पहले पेट के और किसी भी अतिरिक्त रिक्त स्थान सहित अप सब कुछ हड़पने और की जगह कि कुछ भी नहीं के साथ (अनिवार्य रूप से सिर्फ इसे हटाने)

gsub("^[^:]+:\\s*", "", my.data2) 

यदि आप डॉन 'टी आप

gsub("^[^:]+:", "", my.data2) 

कर सकता है मूल नियमित अभिव्यक्ति क्या कर रहा है पर कुछ स्पष्टीकरण के लिए रिक्त स्थान निकालना चाहते हैं।शुरुआत में शुरू:

^ यह केवल स्ट्रिंग के शुरू में मिलान प्राप्त करने के लिए

[^:] यह किसी भी चरित्र है कि एक बृहदान्त्र

+ इस पूर्ववर्ती चरित्र मैच के लिए एक या एक से कहते हैं नहीं है का प्रतिनिधित्व करता है कहते हैं अधिक बार

: (ताकि यथासंभव अधिक से अधिक गैर पेट के वर्णों से मेल) यह है कि क्या वास्तव में पेट से मेल खाता है

\\s यह एक अंतरिक्ष

* इस पूर्ववर्ती चरित्र शून्य या अधिक बार

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

+0

उत्तर और उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद। स्पष्टीकरण के लिए –

+5

+1 –

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