R 中的 grepl 在子集化时无法正常工作

grepl in R not working properly while subsetting

我有一个大数据集,其中一些列表示十进制 (5,2) 格式的数量:

DF

Name|Salary|State
Joe|12345.34|AZ
Mac|3423.67|CT
Lilly|12342.345|CA

显然只有 Joe 符合标准,因此在子集化后我应该得到不符合工资标准的记录 Column.Thus 结果应该是

 Name|Salary|State
 Mac|3423.67|CT
 Lilly|12342.345|CA

我要使用子集函数:

subset(grepl("^[[:digit:]]{,5}\.[[:digit:]]{,2}$",DF$Salary)

subset(grepl("[[:digit:]]{,5}\.[[:digit:]]{,2}",DF)
subset(grepl("[[:digit:]]{,5}[.][[:digit:]]{,2}",DF)

None 这些给了我正确的结果。 经过进一步调查,我发现 grepl 本身无法正常工作。

示例:

x <- "12345.45"
grepl("[[:digit:]]{,5}\.[[:digit:]]{,2}",x)  # TRUE
grepl("[[:digit:]]{,4}\.[[:digit:]]{,2}",x)  # TRUE
grepl("[[:digit:]]{,4}[.][[:digit:]]{,2}",x) # TRUE

浮点比较不准确。阅读 Why are these numbers not equal?

但是,在这种情况下您可以使用:

subset(df, !grepl('\d{5}\.\d\d$', Salary))