2

可能是一个非常基本的问题,但它困扰着我,我无法轻易找到解决方案......所以我认为我应该了解那些聪明人的智慧......

我希望能够根据字符串是纯数字而不是仅包含数字来返回 TRUE 或 FALSE ...我得到的最接近的是

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

但是,这不起作用,因为以下内容在应该为 FALSE 时返回为 TRUE

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

一如既往的任何帮助将不胜感激!

编辑

正如 joran 指出的那样,重要的是要注意字符串只会包含整数和字母,即不会包含数字的小数点或逗号......

4

3 回答 3

9

您应该指定整个正则表达式并指定字符串的开头 (^) 和结尾 ($)。例如 :

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

如果您想了解更多关于正则表达式的信息,请查看http://en.wikibooks.org/wiki/R_Programming/Text_Processing#Regular_Expressions 。

于 2013-06-12T16:14:11.203 回答
7

为什么不直接使用健壮的内部方法来强制转换为整数或数字?

NA如果无法完成,它将返回。is.na如果您想要一个合乎逻辑的结果,请使用:

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

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

请记住,如果您正在处理浮点数,请使用,as.numeric否则您将使用截断数字的浮点部分as.integer

于 2013-06-12T16:12:09.237 回答
0

怎么样!grepl("[^0-9]","993T3")

编辑:这将返回TRUE空字符串。为避免这种情况,请使用

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

对于字符类型的向量x

于 2013-06-12T16:10:51.957 回答