在R中提取部分字符串(直到第一个分号)

Sha*_*ath 7 string r gsub

我有一个列包含由分号分隔的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)


Tyl*_*ker 6

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)