2013-06-12 60 views
2

可能是一個非常基本的問題,但它的buggging我,我不能輕易找到解決方案...所以我想我應該來智慧的SO聰明的...R grepl找到一個純數字

我希望能夠TRUE或FALSE acording返回如果一個字符串是純粹的數字,而不是僅僅包含數字......我得到的最接近是

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

但是這不工作因爲當它應該是FALSE時以下返回TRUE

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

任何幫助將不勝感激!

編輯

由於joran指出,值得注意的是,字符串將只包括整數和字母,即不包括用於數字小數點或逗號是很重要的......

+3

爲了清楚起見,您應該編輯以指定「數字」在這裏是否包含諸如「3.141」或「54,300」之類的內容。 (我懷疑不是,但任何涉及正則表達式的問題應該是關於這些東西的準確。) – joran

+0

啊好點...正則表達式不是我的強項....你是對的它只是整數而不是數字,並且沒有逗號字符串...感謝您注意...問題 –

回答

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,我不明白你施加的這個「約束」,即使用相同的模式。 –