我有一个列包含由分号分隔的3个字符串的值.我需要提取字符串的第一部分.
Type <- c("SNSR_RMIN_PSX150Y_CSH;SP_12;I0.00V50HX0HY3000")
Run Code Online (Sandbox Code Playgroud)
我想要的是:获取字符串的第一部分(直到第一个分号).
输出: SNSR_RMIN_PSX150Y_CSH
我试过gsub但不能理解.请告诉我们如何在R中有效地做到这一点.
akr*_*run 13
你可以试试 sub
sub(';.*$','', Type)
#[1] "SNSR_RMIN_PSX150Y_CSH"
Run Code Online (Sandbox Code Playgroud)
它将匹配模式,即第一次出现;到字符串的末尾并替换为''
或者使用
library(stringi)
stri_extract(Type, regex='[^;]*')
#[1] "SNSR_RMIN_PSX150Y_CSH"
Run Code Online (Sandbox Code Playgroud)
该stringi包工程非常快的在这里:
stri_extract_first_regex(Type, "^[^;]+")
## [1] "SNSR_RMIN_PSX150Y_CSH"
Run Code Online (Sandbox Code Playgroud)
我对这里的3种主要方法进行了基准测试:
Unit: milliseconds
expr min lq mean median uq max neval
SAPPLY() 254.88442 267.79469 294.12715 277.4518 325.91576 419.6435 100
SUB() 182.64996 186.26583 192.99277 188.6128 197.17154 237.9886 100
STRINGI() 89.45826 91.05954 94.11195 91.9424 94.58421 124.4689 100
Run Code Online (Sandbox Code Playgroud)
以下是基准测试的代码:
library(stringi)
SAPPLY <- function() sapply(strsplit(Type, ";"), "[[", 1)
SUB <- function() sub(';.*$','', Type)
STRINGI <- function() stri_extract_first_regex(Type, "^[^;]+")
Type <- c("SNSR_RMIN_PSX150Y_CSH;SP_12;I0.00V50HX0HY3000")
Type <- rep(Type, 100000)
library(microbenchmark)
microbenchmark(
SAPPLY(),
SUB(),
STRINGI(),
times=100L)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5587 次 |
| 最近记录: |