如何在 R 中对字符串进行子集化
How to subset a string in R
亲爱的,我有一个字符串向量,例如:
LOCAT01PE
WECAT013EJD
AFECAT0155DR
我想对每个值进行子集化,只获取 CAT 和之后的所有数字:
CAT01
CAT013
CAT0155
我试过用命令substr
,但是不行,因为CAT前的数量不固定,CAT后的数字也不固定
在 base 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+")
我们还可以使用 substr
和 regexpr
来识别字符串中的相关 start/stop 点:
substr(vec,
start = regexpr('CAT', vec),
stop = regexpr('\d[a-zA-Z]', vec)
)
输出:
[1] "CAT01" "CAT013" "CAT0155"
我们可以在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')
亲爱的,我有一个字符串向量,例如:
LOCAT01PE
WECAT013EJD
AFECAT0155DR
我想对每个值进行子集化,只获取 CAT 和之后的所有数字:
CAT01
CAT013
CAT0155
我试过用命令substr
,但是不行,因为CAT前的数量不固定,CAT后的数字也不固定
在 base 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+")
我们还可以使用 substr
和 regexpr
来识别字符串中的相关 start/stop 点:
substr(vec,
start = regexpr('CAT', vec),
stop = regexpr('\d[a-zA-Z]', vec)
)
输出:
[1] "CAT01" "CAT013" "CAT0155"
我们可以在base R
中使用regexpr/regmatches
。如果有任何 ?
和一个或多个数字 (\d+
)
-
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')