可能是一个非常基本的问题,但它让我觉得我不能轻易找到解决方案......所以我想我应该明白那些明智的人的智慧......
我希望能够返回TRUE或FALSE,如果字符串是纯数字而不是仅包含数字......我得到的最接近的是
grepl("[0-9]","99393")
grepl("[0-9]","blah")
但是这不起作用,因为当它应为FALSE时,以下内容返回为TRUE
grepl("[0-9]","993T3")
任何帮助都会受到赞赏!
编辑
正如joran指出的那样,重要的是要注意字符串只包括整数和字母,即不包括小数点或逗号...
答案 0 :(得分:6)
为什么不使用强大的内部方法来强制转换为整数或数字?
如果无法完成,它将返回NA
。如果您想要合理的结果,请使用is.na
:
is.na( as.integer( "993T3" ) )
# [1] TRUE
is.na( as.integer( "99393" ) )
# [1] FALSE
请记住,如果您正在使用as.numeric
处理浮点数,否则您将使用as.integer
答案 1 :(得分:5)
您应该指定整个正则表达式并指定开头(^)和字符串结尾($)。例如:
> grepl("^[[:digit:]]+$","993T3")
[1] FALSE
如果您想了解有关regexp的更多信息,请查看http://en.wikibooks.org/wiki/R_Programming/Text_Processing#Regular_Expressions。
答案 2 :(得分:0)
!grepl("[^0-9]","993T3")
怎么样?
编辑:这将为空字符串返回TRUE
。为避免这种情况,请使用
!grepl("[^0-9]", x) & nzchar(x)
表示字符类型的矢量x
。