我有一个类似于"HLeelmloon"
的字符串,它是两个交织在一起的单词。如何将它分成两个单独的单词,分开交替的字母?
我可以使用strsplit()
和for
循环为两个新的向量分配交替的字母,然后加入列表,但这看起来很长篇:
string <- "HLeelmloon"
split<-el(strsplit(string,''))
> split
[1] "H" "L" "e" "e" "l" "m" "l" "o" "o" "n"
word1<-c()
word2<-c()
for(i in 1:length(split)){
if(i %% 2 == 1){
word1<-append(word1, split[i])
} else {
word2<-append(word2, split[i])
}
}
word1 = paste0(word1, collapse = '')
word2 = paste0(word2, collapse = '')
> word1
[1] "Hello"
> word2
[1] "Lemon"
我的问题是它不是很优雅,如果我想将字符串分成N个不同的单词,它就不会很好。有更好的方法吗?
答案 0 :(得分:5)
您可以使用gsub
将交替的字符捕获到同一组中:
gsub("(.)(.)?", "\\1", string)
#[1] "Hello"
gsub("(.)(.)?", "\\2", string)
#[1] "Lemon"
答案 1 :(得分:4)
您可以使用TRUE
和FALSE
进行索引,即
v1 = strsplit(string, '')[[1]]
paste(v1[c(TRUE, FALSE)], collapse = '')
#[1] "Hello"
paste(v1[c(FALSE, TRUE)], collapse = '')
#[1] "Lemon"
答案 2 :(得分:2)
考虑到您的问题是如何分成两个以上的单词,您应该使用split
函数。使用示例数据可能会有点混乱,因为您选择将一个变量命名为“split”。在下面的块中,第一个'split'是函数,第二个是split split变量。
number_of_words <- 2
lapply(split(split,1:number_of_words),paste0,collapse='')
$`1`
[1] "Hello"
$`2`
[1] "Lemon"
number_of_words <- 3
lapply(split(split,1:number_of_words),paste0,collapse='')
$`1`
[1] "Heln"
$`2`
[1] "Llo"
$`3`
[1] "emo"
为避免混淆,这里的代码相同,没有名为split的变量:
number_of_words <- 2
lapply(split(el(strsplit(string,'')),1:number_of_words),paste0,collapse='')
$`1`
[1] "Hello"
$`2`
[1] "Lemon"
答案 3 :(得分:1)
试试这段代码:
paste0(split[seq(1,nchar(string),by = 2)],collapse="")
[1] "Hello"
> paste0(split[seq(2,nchar(string),by = 2)],collapse="")
[1] "Lemon"
它在字符串string
答案 4 :(得分:1)
使用split
变量的另一种方法是使用任意数量的单词:
N <- 2
apply(matrix(split,N),1,paste,collapse="")
# [1] "Hello" "Lemon"