假设我有一个长的字符串:分割字符串,每5个字符
"XOVEWVJIEWNIGOIWENVOIWEWVWEW"
我如何拆分此得到后面有一个空格,每5个字符?
"XOVEW VJIEW NIGOI WENVO IWEWV WEW"
请注意,最后一个更短。
我可以做一个循环,我不断地计算和建立一个新的字符串的字符,但肯定还有一些更好的没有?
假设我有一个长的字符串:分割字符串,每5个字符
"XOVEWVJIEWNIGOIWENVOIWEWVWEW"
我如何拆分此得到后面有一个空格,每5个字符?
"XOVEW VJIEW NIGOI WENVO IWEWV WEW"
请注意,最后一个更短。
我可以做一个循环,我不断地计算和建立一个新的字符串的字符,但肯定还有一些更好的没有?
使用正则表达式:
gsub("(.{5})", "\\1 ", "XOVEWVJIEWNIGOIWENVOIWEWVWEW")
# [1] "XOVEW VJIEW NIGOI WENVO IWEWV WEW"
这真是太好了,我必须说 – 2014-10-21 22:51:54
@ flodel,你能帮忙解释“\\ 1”吗?我已经算出了所有其他的东西,但是绊倒我 – user1357015 2014-10-22 03:38:38
@ user1357015我认为hwnd在这里解释这个想法做得很好:http://stackoverflow.com/a/26495062/1000343 – 2014-10-22 03:44:55
你可以尝试像下面的内容:
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"
现在你可以paste
结果矢量(与collapse=' '
),以获得与空间的一个字符串。
应粘贴和折叠methinks – rawr 2014-10-21 22:48:38
这看起来不错,我可以从这里粘贴和折叠。但是,你介意给出一些有关这种基因工程如何工作的见解吗?谢谢! – user1357015 2014-10-21 22:50:11
@ user1357015添加了一些评论。 – 2014-10-21 22:55:45
使用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"
你也可以使用一个子串没有环。 substring
是矢量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"
否*适用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
功能被矢量本身我们并不需要使用*申请这里。
检查出这个问题:https://stackoverflow.com/questions/2247045/chopping-a-string-into-a-vector-of-fixed-width-character-elements – n8sty 2014-10-21 22:48:20