替换其中有符号的单词

replace the word in which there is a symbol

我有资料

vec <- c("RT_12_ SDB", "ZT_12_", "_12TR", "RE_12_TR")

我想替换所有在“12”上有“_12”的数据

我想得到什么:

vec <- c(12 SDB,12,12,12)

我试过了

vec <- gsub("\b_12_\w+", "12", c("RT_12_", "ZT_12_", "_12TR", "RE_12_TR"))

但是没用

为什么不直接从数据中提取 12?

as.numeric(stringr::str_extract(vec, '12'))
#[1] 12 12 12 12

在基础 R 中,

as.numeric(sub('.*(12).*', '\1', vec))

对于更新的数据我们可以使用-

sub("(?<=12)[A-Z]+", "", gsub('.*(?=12)|_', '', vec, perl = TRUE),perl = TRUE)
#[1] "12 SDB" "12"     "12"     "12" 

内部 gsub 删除 12 之前的所有内容和下划线,而外部 sub 删除 12 之后的字符。

你可以试试这个

gsub('.*(12(_\sSDB)?).*', '\1', vec)
# [1] "12_ SDB" "12"      "12"      "12"    

我们可以使用 trimws 来自 base R

as.numeric( trimws(vec, whitespace = "\D+"))
#[1] 12 12 12 12