我有一個字串,"1500|3|10000|5",我希望有一個數字向量,比如:
[1] 1500 3 10000 5
strsplit比str_extract_all快很多。strsplit是最快的方法嗎?
library("tidyverse")
library("microbenchmark")
x <- "1500|3|10000|5"
# mean ~ 137 microseconds;/span>
microbenchmark()
x |>
str_extract_all("d ") |>
unlist(use.names = FALSE) |>/span>
as.double()
)
# mean ~ 15 microseconds[/span]。
microbenchmark()
x |>
strsplit(split = "|") |>/span>
unlist(use.names = FALSE) |>/span>
as.double()
)。
uj5u.com熱心網友回復:
stringi似乎稍微快一些,同時為了達到最大的速度,應該省略管道。
library(stringr)
library(stringi)
set.seed(123)
x < -粘貼0(sample(100000)。 崩潰= '|')
microbenchmark::microbenchmark()
str_extract = x |>/span>
str_extract_all("d ") |>
unlist(use.names = FALSE) |>/span>
as.double() ,
strsplit = x |>/span>
strsplit(split = "|") |>/span>
unlist(use.names = FALSE) |>/span>
as.double() ,
strsplit_fixed = x |>/span>
strsplit(split = '|'。 固定= TRUE) |>
unlist(use.names = FALSE) |>/span>
as.numeric(),
stringi = as. numeric(stri_split_fixed(x, '|')[[1]])。
stringi2 = x |>/span>
stri_split_fixed(pattern = '|'/span>) |>
unlist(use.names = FALSE) |>
as.numeric()
)
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# str_extract 27.5158 27.77085 28.63940 28.01650 28.32090 36.7092 100 c/span>
# strsplit 50.6624 51.16750 52.11587 51.55955 51.98610 59.2446 100 d
# strsplit_fixed 18.9921 19.24650 20.95589 19.40140 19.68805 113.9647 100 b/span>
# stringi 17.8246 18.13970 18.53155 18.31015 18.57825 26.4410 100 a
# stringi2 18.2519 18.64035 19.21868 18.78765 19.20105 27.1056 100 ab
uj5u.com熱心網友回復:
我假設這個問題是因為你有一個大的管道分隔的檔案,你需要把它變成一個資料框架。
如果你已經把檔案讀成一個char向量x:
x <- readLines("mydelimfile.txt")
# base R
df <- read. delim(text=x, sep="|"。 header=FALSE)
# with readr
df <- readr:: read_delim(paste0(x, collapse="
"), delim=" |"。 col_names=FALSE)
但是你可以直接把檔案轉換成df:
df <- read.delim("mydelimfile. txt", sep="|")
df <- readr::read_delim("mydelimfile. txt", delim="|")
uj5u.com熱心網友回復:
在strsplit中使用fixed = TRUE可以提供更好的結果。在一個較大的樣本上,str_extract_all比你帖子中的strsplit代碼表現得更好。
library(stringr)
set.seed(123)
x < -粘貼0(sample(100000)。 崩潰= '|')
microbenchmark::microbenchmark()
str_extract = x |>/span>
str_extract_all("d ") |>
unlist(use.names = FALSE) |>/span>
as.double() ,
strsplit = x |>/span>
strsplit(split = "|") |>/span>
unlist(use.names = FALSE) |>/span>
as.double() ,
strsplit_fixed = x |>/span>
strsplit(split = '|'。 固定= TRUE) |>
unlist(use.names = FALSE) |>/span>
as.numeric()
)
#Unit: milliseconds[/span]。
# expr min lq mean median uq max neval cld
# str_extract 27.00734 28.68815 30.62537 29.62420 31.59296 55.36550 100 b
# strsplit 87.71705 91.47075 97.39022 94.99620 101.27776 123.17484 100 c
# strsplit_fixed 17.57684 20.08943 23.03720 21.59174 23.40159 49.83912 100 a/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309427.html
標籤:
上一篇:Hbase Shell
