2013-06-12 3 views
2

Возможно, это очень простой вопрос, но его ошибка в том, что я не могу найти решение ... поэтому я подумал, что должен прийти к мудрости SO wise ...R grepl, чтобы найти чистую цифру

Я хотел бы быть в состоянии возвратить ИСТИНУ или ЛОЖЬ acording, чтобы, если строка символов является просто числом, а не просто содержащим числа ... ближайшим я получил

grepl("[0-9]","99393") 
grepl("[0-9]","blah") 

Однако это не работает поскольку возвращается как ИСТИНА, когда оно должно быть ЛОЖНО

grepl("[0-9]","993T3") 

Как всегда любая помощь была бы оценена!

EDIT

Как Joran отметил, что важно отметить, что строка символов будет только когда-либо включать в себя целые числа и буквы, то есть не будет включать в себя десятичную точку или запятые для числа ...

+3

Для большей ясности вы должны, вероятно, изменить, чтобы указать, включают ли здесь «числа» такие вещи, как '3.141' или' 54,300'. (Я подозреваю, что нет, но любой вопрос, связанный с регулярным выражением, должен быть точным в отношении этих вещей.) – joran

+0

А хорошая точка ... regex is not my forte .... и вы правы, это целые числа, а не числа, и никакие запятые в string ... спасибо за внимание ... вопрос –

ответ

5

Почему бы вам просто не использовать надежные внутренние методы для принудительного или целого числа или числа?

Будет отправлено NA если это невозможно. Используйте is.na, если вы хотите, логический результат:

is.na(as.integer("993T3")) 
# [1] TRUE 

is.na(as.integer("99393")) 
# [1] FALSE 

Помните, что если вы имеете дело с числами с плавающей запятой используете as.numeric иначе вы усечь точечную часть плавучей Вашего номера с помощью as.integer

+0

Ах !!! гораздо умнее! Благодаря! –

+0

@ h.l.m вы очень желанны! –

+3

Как насчет 'as.integer (" 0xABCD ")'? –

0

Как насчет !grepl("[^0-9]","993T3")?

Редактировать: Это возвращает TRUE для пустой строки. Чтобы избежать этого, используйте

!grepl("[^0-9]", x) & nzchar(x) 

для вектора x символьного типа.

+0

Идея заключалась в том, что я должен использовать тот же шаблон, то есть 'grepl (« [0-9] », ...), чтобы получить ответ ... так что нет. .. –

+0

@hlm, я не понимаю это «ограничение», которое вы налагаете, т. Е. Используя тот же шаблон. –

4

Вы должны указать все регулярное выражение и указать начало (^) и конец строки ($). Например:

> grepl("^[[:digit:]]+$","993T3") 
[1] FALSE 

Посмотрите на http://en.wikibooks.org/wiki/R_Programming/Text_Processing#Regular_Expressions, если вы хотите узнать больше о регулярных выражениях.

+0

Это ищет строку из одной цифры. –

+1

это передаст пустую строку, вы хотите «+», а не «*», –

Смежные вопросы