2017-03-01 103 views
1

我想通過grepl和regexp驗證字符串中數字的向量。所以我發現grepl自動修剪前導零,所以我得到了錯誤的答案。我試圖使用as.character沒有成功。驗證確定長度的數字的字符串向量

這是我的函數:

isValidTest <- function(x){ 
    x <- as.character(x) 
    grepl("^[[:digit:]]{13}$", x) 
} 

和我的測試:

> isValidTest(c(9788467850703,0759398399, 3002011502068, 0788467850703)) 
[1] TRUE FALSE TRUE FALSE 

而是用引號:

> isValidTest(c(9788467850703,0759398399, 3002011502068, "0788467850703")) 
[1] TRUE FALSE TRUE TRUE 

注意向量的最後一個項目從0開始0788467850703我想要檢索一個真實的答案。另一方面,爲什麼as.character不工作?

+3

它不是grepl,在控制檯上鍵入012並按回車,它是12.如果這些是電話號碼,請將它們保留爲字符串。 – zx8754

+0

謝謝zx!什麼錯! – Gabriel

回答

0

as.character不能按預期工作,因爲你構建的載體被強制爲數字和失去前導零,則:

> x <- c(9788467850703,0759398399, 3002011502068, 0788467850703) 
> x 
[1] 9.788468e+12 7.593984e+08 3.002012e+12 7.884679e+11 
> lapply(x,class) 
[[1]] 
[1] "numeric" 

[[2]] 
[1] "numeric" 

[[3]] 
[1] "numeric" 

[[4]] 
[1] "numeric" 

轉換的數字回字符串不恢復前導零即可。

改爲使用字符串矢量(作爲第一條評論的作者推薦)。