2015-02-17 2 views
0

Я пытаюсь извлечь числа в конце строки, используя regexecКак извлечь и заменить шаблон в R

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" 

i.e. Он должен иметь значение NA везде, где он не мог найти указанный шаблон. Может ли кто-нибудь сказать мне, как это сделать или предложить мне другой способ добиться этого?

ответ

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)) 
+2

Использование [stringr] (https: // github.com/hadley/stringr): 'Библиотека ("stringr"); y <- c ("abcd-efgh/xyz/123456789", "123456789", "abcd-efgh", "123456789"); str_extract (y, "\\ d + $"); ' ' #> "123456789" "123456789" NA "123456789" –

1

Вы можете попробовать:

ifelse(grepl("[[:digit:]]", y) == TRUE, gsub("[^[:digit:]]","", y), NA) 
Смежные вопросы