如何在R中提取和替换模式

时间:2015-02-17 00:10:47

标签: r

我正在尝试使用regexec

在字符串末尾提取数字
y <- c("abcd-efgh/xyz/123456789", "123456789", "abcd-efgh", "123456789")
m <- regexec("\\d+$", y)
new_y <- unlist(regmatches(y, m))

new_y的最终值如下所示

> new_y
[1] "123456789" "123456789" "123456789"

但我希望它看起来像这样。

> new_y
[1] "123456789" "123456789" NA "123456789"

即。它应该具有NA值,无论它找不到指定的模式。 任何人都可以告诉我如何做到这一点或建议我另一种方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

怎么样:

new_y = gsub("^.*[^0-9]","",y)
new_y[new_y == ""] <- NA

或者如果您想使用regexpr,那么:

start <- regexpr("([0-9]+$)",y)
new_y = substr(y,
               ifelse(start>0,start,NA),
               nchar(y))

答案 1 :(得分:1)

你可以尝试:

ifelse(grepl("[[:digit:]]", y) == TRUE, gsub("[^[:digit:]]","", y), NA)