我想将字符串分组(如下所示)
text="Lorem,ipsum,dolor,sit,amet,consectetuer"
像这样
textNew="Lorem ipsum,ipsum dolor,dolor sit,sit amet,amet consectetuer"
感谢。
答案 0 :(得分:5)
通过gsub
功能,
> text="Lorem,ipsum,dolor,sit,amet,consectetuer"
> f <- gsub(",([^,]*)", " \\1,\\1", text, perl=TRUE)
> result <- gsub(",[^,]*$", "", f, perl=TRUE)
> result
[1] "Lorem ipsum,ipsum dolor,dolor sit,sit amet,amet consectetuer"
答案 1 :(得分:4)
这是一个选项:
x <- strsplit(text, ",")[[1]]
paste0(sapply(1:(length(x)-1), function(z) paste(x[c(z, z+1)], collapse = " ")), collapse = ",")
[1] "Lorem ipsum,ipsum dolor,dolor sit,sit amet,amet consectetuer"
答案 2 :(得分:2)
啊,有类似的东西。
text="Lorem,ipsum,dolor,sit,amet,consectetuer"
text2 <- unlist(strsplit(text, ","))
textNew=paste0(sapply(1:(length(text2)-1),function(i,y=text2){paste(y[i],y[i+1])}),collapse=",")
答案 3 :(得分:2)
你也可以这样做:
library(stringr)
txt2 <- str_extract_all(text, "[^,]+")[[1]]
paste(paste(txt2[-length(txt2)],txt2[-1],sep=" "), collapse=", ")
#[1] "Lorem ipsum, ipsum dolor, dolor sit, sit amet, amet consectetuer"
或者
library(gsubfn)
paste(strapply(text, "([^,]+),(?=([^,]+))", paste, backref= -2, perl=TRUE)[[1]], collapse=",")
#[1] "Lorem ipsum,ipsum dolor,dolor sit,sit amet,amet consectetuer"
答案 4 :(得分:2)
您可以使用stringi
package
require(stringi)
text <- "Lorem,ipsum,dolor,sit,amet,consectetuer"
words <- stri_split_fixed(text,",")[[1]]
stri_join(words[-length(words)]," ",words[-1],collapse = ", ")
## [1] "Lorem ipsum, ipsum dolor, dolor sit, sit amet, amet consectetuer"
一些基准:)
stringi <- function(){
words <- stri_split_fixed(text,",")[[1]]
stri_join(words[-length(words)]," ",words[-1],collapse = ", ")
}
gsubAvinash <- function(){
f <- gsub(",([^,]*)", " \\1,\\1", text, perl=TRUE)
result <- gsub(",[^,]*$", "", f, perl=TRUE)
result
}
strsplitBeggineR <- function(){
x <- strsplit(text, ",")[[1]]
paste0(sapply(1:(length(x)-1), function(z) paste(x[c(z, z+1)], collapse = " ")), collapse = ",")
}
stringrAkrun <- function(){
txt2 <- str_extract_all(text, "[^,]+")[[1]]
paste(paste(txt2[-length(txt2)],txt2[-1],sep=" "), collapse=", ")
}
require(microbenchmark)
microbenchmark(stringi(), gsubAvinash(),strsplitBeggineR(),stringrAkrun())
Unit: microseconds
expr min lq median uq max neval
stringi() 8.657 10.6090 16.5005 17.6730 41.058 100
gsubAvinash() 14.506 17.1055 20.2105 22.2040 97.399 100
strsplitBeggineR() 53.609 59.7755 64.9470 68.3105 121.767 100
stringrAkrun() 148.036 157.4715 162.4885 168.2880 342.471 100