簡體   English   中英

R中的字符串操作,使用不同的分隔符進行拆分和折疊

[英]String Manipulation in R, splitting and collapsing with a different separator

我有一個關於在R中拆分字符串的問題。

我有一個像這樣的字符串:

"Tommaso.is.very.stupid"

我想擁有:

"Tommaso is very stupid"

有沒有簡單的方法可以做到這一點?

strsplit("Tommaso.is.very.stupid","\\.") 

為我提供了一個列表,其中包含一個由4個單詞組成的向量,我如何將它們折疊在一起並在它們之間留一個空格?

謝謝你,很抱歉給你這么小的問題

我們可以使用gsub替換. 帶有空格" "

gsub(".", " ", "Tommaso.is.very.stupid", fixed = TRUE)
#[1] "Tommaso is very stupid"

基准測試

library(microbenchmark)
library(stringi)
set.seed(24)
v1 <- stri_rand_strings(1e6, 100, pattern = "[A-F.]")

f1 <- function() gsub(".", " ", v1, fixed = TRUE)      
f2 <- function() paste(strsplit(v1, ".", fixed=TRUE)[[1]], collapse=' ')
microbenchmark(f1(), f2(), times = 20L, unit = "relative")
#Unit: relative
# expr      min       lq     mean  median      uq      max neval
#f1() 1.000000 1.000000 1.000000 1.00000 1.00000 1.000000    20
#f2() 2.575039 4.501027 3.074894 4.80972 2.87893 1.745782    20

以更一般的方式

paste(strsplit("Tommaso.is.very.stupid", ".", fixed=TRUE)[[1]], collapse=' ')

這比使用gsub快兩倍左右

microbenchmark(paste(strsplit("Tommaso.is.very.stupid", ".", fixed=TRUE)[[1]], collapse=' '), gsub(".", " ", "Tommaso.is.very.stupid", fixed=FALSE))
Unit: microseconds


    expr
 paste(strsplit("Tommaso.is.very.stupid", ".", fixed = TRUE)[[1]],      collapse = " ")
                                gsub(".", " ", "Tommaso.is.very.stupid", fixed = FALSE)
   min      lq     mean  median      uq    max neval
 4.138  4.7300  5.81864  5.3205  5.7735 29.626   100
 9.352 10.1015 11.05360 10.4000 10.7795 35.177   100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM