我正在尝试使用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值,无论它找不到指定的模式。 任何人都可以告诉我如何做到这一点或建议我另一种方法来实现这一目标吗?
答案 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)