即使十进制后的所有内容都为零,也要找到十进制

时间:2019-01-29 05:30:30

标签: r regex

我正在尝试查找小数点的位置(如果存在),即使小数点后的所有内容均为零。

这种类型的问题已经出现了很多次,但是我没有看到任何说明实际格式的东西。

方案:将Excel电子表格读入R。所有带有超过特定小数位数的数字都必须标记出来。我的向量有大约1,000个条目。

string = as.character(c(123, 0.123, 123.00000, 123.0, 123., 123.4567,  123.456789))
pattern = '\\.'
library(stringi)`

这不是我想要的

str_locate(string = string, pattern = pattern)[1:length(string), 1]
#[1] NA  2 NA NA NA  4  4

我想要

#[1] NA 2 4 4 4 4 4

如果我将字符串更改为

string = c('123', '0.123', '123.00000', '123.0', '123.', '123.4567', '123.456789')

然后我用

得到正确的答案
str_locate(string = string, pattern = pattern)[1:length(string), 1]
#[1] NA  2  4  4  4  4  4

1 个答案:

答案 0 :(得分:3)

首先需要使用colClasses = "character"的{​​{1}}选项将数字作为字符串读入R。 (请参阅文档herehere。)如果将它们阅读为数字然后将其转换为字符串,则123.000将转换为“ 123”,并且会丢失您要查找的信息。

说明

执行时

read.csv

发生的情况是string = as.character(c(123.000)) 被解释为数字文字,并存储为数字123.000。使用123将数字转换为字符串时,将得到as.character。如果打印"123",将会看到此信息。因此,搜索字符串时,您当然不会看到小数点,因为它已在转换中丢失。