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))
我有一个大数据集,其中一些列表示十进制 (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))