我有一个大数据集,其中一些列用Decimal(5,2)格式表示金额:
DF
Name|Salary|State
Joe|12345.34|AZ
Mac|3423.67|CT
Lilly|12342.345|CA
显然只有Joe符合条件,所以在子集设置后,我应该获得与Salary Column上的条件不匹配的记录。因此结果应该是
Name|Salary|State
Mac|3423.67|CT
Lilly|12342.345|CA
我想使用子集功能:
subset(grepl("^[[:digit:]]{,5}\\.[[:digit:]]{,2}$",DF$Salary)
OR
subset(grepl("[[:digit:]]{,5}\\.[[:digit:]]{,2}",DF)
subset(grepl("[[:digit:]]{,5}[.][[:digit:]]{,2}",DF)
这些都不给我正确的结果。在进一步调查中,我发现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))