如何在R中为字符串子集



亲爱的,我有一个字符串向量,比如:

LOCAT01PE
WECAT013EJD
AFECAT0155DR

我想子集每个值只获得CAT和之后的所有数字:

CAT01
CAT013
CAT0155

我试过使用命令substr,但它不起作用,因为单词CAT之前的数量不固定,CAT之后的数字也不固定。

在R基中,我们可以使用sub来提取后面跟着数字的"CAT"。

x <- c('LOCAT01PE', 'WECAT013EJD', 'AFECAT0155DR')
sub('..*(CAT\d+).*', '\1', x)
#[1] "CAT01"   "CAT013"  "CAT0155"

或与str_extract类似

stringr::str_extract(x, "CAT\d+")

我们可以在base R中使用regexpr/regmatches。如果有任何?和一个或多个数字(\d+(,则匹配单词"CAT",后跟-

regmatches(x, regexpr("CAT-?\d+", x))
#[1] "CAT01"    "CAT013"   "CAT0155"  "CAT-01"   "CAT-013"  "CAT-0155"

数据

x <- c('LOCAT01PE', 'WECAT013EJD', 'AFECAT0155DR', 
'LO-CAT-01PE', 'WE-CAT-013-EJD', 'AFE-CAT-0155-DR')

我们还可以将substrregexpr一起使用来识别字符串中的相关开始/停止点:

substr(vec,
start = regexpr('CAT', vec),
stop = regexpr('\d[a-zA-Z]', vec)
)

输出:

[1] "CAT01"   "CAT013"  "CAT0155"

最新更新