R |中的字符串转换分组字符串的单词

时间:2014-08-22 07:29:53

标签: regex r string

我想将字符串分组(如下所示)

text="Lorem,ipsum,dolor,sit,amet,consectetuer"
像这样

textNew="Lorem ipsum,ipsum dolor,dolor sit,sit amet,amet consectetuer"

感谢。

5 个答案:

答案 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