2014-10-21 5 views
17

मान लीजिए मैं एक लंबी स्ट्रिंग है:स्प्लिट एक स्ट्रिंग हर 5 अक्षर

"XOVEWVJIEWNIGOIWENVOIWEWVWEW" 

मैं कैसे विभाजित कर इस हर 5 अक्षर फिर एक रिक्ति पाने के लिए?

"XOVEW VJIEW NIGOI WENVO IWEWV WEW" 

ध्यान दें कि आखिरी वाला छोटा है।

मैं कहाँ मैं लगातार गिनती और चरित्र करके एक नया स्ट्रिंग चरित्र का निर्माण लेकिन निश्चित रूप से वहाँ कुछ बेहतर नहीं होना चाहिए एक पाश कर सकते हैं?

+3

जांच इस सवाल: https://stackoverflow.com/questions/2247045/chopping-a-string-into-a-vector-of-fixed-width-character-elements – n8sty

उत्तर

37

का उपयोग करना:

gsub("(.{5})", "\\1 ", "XOVEWVJIEWNIGOIWENVOIWEWVWEW") 
# [1] "XOVEW VJIEW NIGOI WENVO IWEWV WEW" 
+7

यह सुंदर बहुत अच्छी है, मैं कहना होगा –

+0

@flodel, तुम समझा मदद कर सकते हैं "\\ 1"? मैं सब कुछ बाहर कुछ और समझ गए होंगे लेकिन है कि मुझे – user1357015

+1

@ user1357015 ठोकर मुझे लगता है कि hwnd यहाँ एक अच्छा इस विचार को स्पष्ट करने का काम करता है: http://stackoverflow.com/a/26495062/1000343 –

8

आप निम्न की तरह कुछ की कोशिश कर सकते हैं:

s <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW" # Original string 
l <- seq(from=5, to=nchar(s), by=5) # Calculate the location where to chop 

# Add sentinels 0 (beginning of string) and nchar(s) (end of string) 
# and take substrings. (Thanks to @flodel for the condense expression) 
mapply(substr, list(s), c(0, l) + 1, c(l, nchar(s))) 

आउटपुट:

[1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW" 

अब आप (collapse=' ' के साथ) जिसके परिणामस्वरूप वेक्टर paste कर सकते हैं रिक्त स्थान के साथ एक एकल स्ट्रिंग प्राप्त करने के लिए।

+2

चिपकाया जाना चाहिए और – rawr

+0

यह मुझे मालूम होता है ढह बहुत अच्छा लगता है, मैं पेस्ट और यहाँ से संक्षिप्त कर सकते हैं। लेकिन आप कैसे है कि mapply काम करता है पर कुछ जानकारी दे रही है बात करेंगे? धन्यवाद! – user1357015

+0

@ user1357015 कुछ टिप्पणियाँ जोड़ा गया। –

11

नियमित अभिव्यक्ति का उपयोग करते हुए sapply

> string <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW" 
> sapply(seq(from=1, to=nchar(string), by=5), function(i) substr(string, i, i+4)) 
[1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW" 
6

तुम भी एक पाश के बिना एक उप-स्ट्रिंग का उपयोग कर सकते हैं। substring vectorized substr

x <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW" 
n <- seq(1, nc <- nchar(x), by = 5) 
paste(substring(x, n, c(n[-1]-1, nc)), collapse = " ") 
# [1] "XOVEW VJIEW NIGOI WENVO IWEWV WEW" 
4

है कोई * लागू stringi समाधान:

x <- "XOVEWVJIEWNIGOIWENVOIWEWVWEW" 
stri_sub(x, seq(1, stri_length(x),by=5), length=5) 
[1] "XOVEW" "VJIEW" "NIGOI" "WENVO" "IWEWV" "WEW" 

यह सिर्फ @Jilber जवाब में की तरह सबस्ट्रिंग निकालता है, लेकिन stri_sub समारोह vectorized है se * लागू हम उपयोग करने के लिए की जरूरत नहीं है यहाँ।

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