测试字符串中的数字元素

Tyl*_*ker 44 regex r

我想测试一个字符串,看看哪些元素实际上可以是数字.我可以使用正则表达式来测试整数是否成功,但我希望看到哪些元素具有所有数字和1或更少的小数.以下是我尝试过的内容:

x <- c("0.33", ".1", "3", "123", "2.3.3", "1.2r")
!grepl("[^0-9]", x)   #integer test

grepl("[^0-9[\\.{0,1}]]", x)  # I know it's wrong but don't know what to do
Run Code Online (Sandbox Code Playgroud)

我正在寻找逻辑输出,所以我希望得到以下结果:

[1] TRUE TRUE TRUE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 55

也许有一些原因,你的数据的其他部分更复杂,会破坏这一点,但我的第一个想法是:

> !is.na(as.numeric(x))
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

正如下面Josh O'Brien所说,这将不会像7LR解释器那样解析为整数7.如果你需要将它们包含为"似乎合理的数字",一条路线就是用正则表达式来挑选它们第一,

x <- c("1.2","1e4","1.2.3","5L")
> x
[1] "1.2"   "1e4"   "1.2.3" "5L"   
> grepl("^[[:digit:]]+L",x)
[1] FALSE FALSE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

...然后使用gsub和索引从那些元素中剥离"L" .

  • 它的简单性.辉煌.:尴尬: (3认同)
  • @thelatemail不是我所知道的.我认为`suppressWarnings`可能是要走的路. (3认同)
  • @joran - 是否有另一种方法可以不输出警告,或者最好将它包装在`suppressWarnings`并继续使用它? (2认同)
  • @Joran 如果字符串中已经有 NA 怎么办?没关系使用: `!is.na(as.numeric(na.omit(x)))` 在这种情况下,这将起作用,但可能不适用于其他未来的搜索者。 (2认同)

pen*_*v22 6

我最近遇到了类似的问题,我试图编写一个函数来格式化从另一个函数作为字符串传递的值.格式化的值最终会在一个表中结束,我想创建逻辑来识别数字的NA,字符串和字符表示,以便我可以sprintf()在生成表之前应用它们.

虽然阅读起来比较复杂,但我确实喜欢这种grepl()方法的稳健性.我认为这会得到评论中提到的所有例子.

x <- c("0",37,"42","-5","-2.3","1.36e4","4L","La","ti","da",NA)

y <- grepl("[-]?[0-9]+[.]?[0-9]*|[-]?[0-9]+[L]?|[-]?[0-9]+[.]?[0-9]*[eE][0-9]+",x)
Run Code Online (Sandbox Code Playgroud)

这将被评估为(格式化以帮助可视化):

x
[1] "0"  "37"   "42"  "-5"   "-2.3"   "1.36e4" "4L" "La"     "ti"     "da"     NA 

y
[1] TRUE  TRUE   TRUE  TRUE   TRUE     TRUE    TRUE FALSE   FALSE    FALSE    FALSE
Run Code Online (Sandbox Code Playgroud)

正则表达式为TRUE:

  • 正数或负数,不超过一位小数OR
  • 正整数或负整数(例如,4L)OR
  • 科学记数法中的正数或负数

如果数据集中包含数字较差的数字,则可以添加附加项以处理小数而不带前导数字或带小数点但不是小数点后的数字.


qwr*_*qwr 5

避免使用varhandlecheck.numeric()包重新发明轮子。

该函数接受以下参数:

v特征向量或因子向量。(强制的)

na.rm逻辑。该函数应该忽略 NA 吗?默认值为 FLASE,因为 NA 可以转换为数字。(选修的)

only.integer逻辑。只检查整数,不接受浮点数。默认值为 FALSE。(选修的)

异常包含应被视为有效以转换为数字的字符串的字符向量。(选修的)

ignore.whitespace逻辑。在评估向量是否可以转换为数字之前,忽略前导和尾随空白字符。默认值为 TRUE。(选修的)