2015-10-28 4 views
1

Я пробовал следующее, однако это не так, когда строка содержит любой другой символ, например пробел. Как вы можете видеть ниже, есть строка под названием «метро 10», которая содержит числовые символы, однако она сообщается как ложная из-за пробела.Как проверить, содержит ли строка хотя бы один числовой символ в R

Моя строка может содержать любой другой символ, но если она содержит хотя бы одну цифру, я хотел бы получить индексы этих строк из массива.

> mywords<- c("harry","met","sally","subway 10","1800Movies","12345") 
> numbers <- grepl("^[[:digit:]]+$", mywords) 
> letters <- grepl("^[[:alpha:]]+$", mywords) 
> both <- grepl("^[[:digit:][:alpha:]]+$", mywords) 
> 
> mywords[xor((letters | numbers), both)] # letters & numbers mixed 
[1] "1800Movies" 
+3

я мог бы что-то отсутствует, но почему бы вам не использовать '" [[: digit:]] + "'? – Roland

+2

Проблема заключается в использовании анкеров '^' & '$';, например. ''^[[: digit:]] + $ "' проверяет, содержит ли строка * только * числа. – nrussell

ответ

8

используя \\d работает для меня:

grepl("\\d", mywords) 
[1] FALSE FALSE FALSE TRUE TRUE TRUE 

так же [[:digit:]]:

grepl("[[:digit:]]", mywords) 
[1] FALSE FALSE FALSE TRUE TRUE TRUE 

Как упоминалось @nrussel, вы проверяете, если строки содержат только цифры между началом ^ строки до конца $.

Вы также можете проверить, если строки содержат что-то другое, чем буквы, используя ^ внутри скобки, чтобы свести на нет буквы, но потом «что-то еще» не только цифры:

grepl("[^a-zA-Z]", mywords) 
[1] FALSE FALSE FALSE TRUE TRUE TRUE 
Смежные вопросы