R中的grepl在子设置时无法正常工作

问题描述 投票:1回答:1

我有一个大数据集,其中一些列用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

enter image description here

r subset grepl
1个回答
0
投票

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

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

subset(df, !grepl('\\d{5}\\.\\d\\d$', Salary))
© www.soinside.com 2019 - 2024. All rights reserved.