2014-10-21 20 views
17

Ben uzun dizesi var varsayalım: Ben bölünmüş bunu her 5 karakter boşluk ileBölünmüş bir dize her 5 karakter

"XOVEWVJIEWNIGOIWENVOIWEWVWEW" 

takip almak nasıl?

"XOVEW VJIEW NIGOI WENVO IWEWV WEW" 

Sonuncunun daha kısa olduğunu unutmayın.

Sürekli olarak saydığım ve karakter olarak yeni bir karakter dizisi oluşturduğum bir döngü yapabilirim ama kesinlikle daha iyi bir şey olmalı?

+3

onay dışarı bu soruyu: https://stackoverflow.com/questions/2247045/chopping-a-string-into-a-vector-of-fixed-width-character-elements – n8sty

cevap

37

kullanma

+7

Bu çok güzel, –

+0

@flodel demeliyim, "\\ 1" açıklamanıza yardımcı olabilir misiniz? Ben her şey dışarı düşündüm ama bu beni – user1357015

+1

@ user1357015 tökezliyor bence hwnd burada bu fikri açıklayan güzel bir iş: http://stackoverflow.com/a/26495062/1000343 –

8

Aşağıdaki gibi bir şey deneyebilirsiniz:

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))) 

Çıktı:

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

Şimdi ( collapse=' ' ile) elde edilen vektör paste edebilir boşluk olmadan tek dize elde etmek. Normal ifadeler kullanma 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" 
+2

yapıştırılan ve – rawr

+0

Bu galiba çöktü edilmelidir harika görünüyor, buradan yapıştırabilir ve çökebilirim. Ama bu haritanın nasıl çalıştığına dair bir fikir verebilir misin? Teşekkürler! – user1357015

+0

@ user1357015 Eklenen yorumlar. –

11

:

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

Ayrıca bir döngü olmadan bir alt dizesi kullanabilirsiniz. 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

olan Hayır * uygulamak stringi çözüm: Bu sadece @Jilber yanıtında gibi alt dizeleri ayıklar, ancak stri_sub fonksiyonu * uygulamak Kullandığımız gerekmez se vectorized edilir

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

İşte.