如果值小于2个小数位,则删除数据框中的行

时间:2014-03-18 12:31:07

标签: r grep extract subset

在数据框的一列中,我有经度值。例如:

df<-data.frame(long=c(-169.42000,144.80000,7.41139,-63.07000,-62.21000,14.48333,56.99900))

我想保留至少有三个小数位的行(即小数点后紧跟三个非零值)并删除所有其他行。因此,在上面的示例中,将从df删除行1,2,4和5。

到目前为止,我已尝试使用grep来提取我要保留的行:

new.df<-df[-grep("000$",df$long),]

但是这已经删除了所有行。有任何想法吗?我是新手使用grep因此可能会出现一些我没有注意到的明显错误!

非常感谢!

2 个答案:

答案 0 :(得分:5)

我不会使用正则表达式。

tol <- .Machine$double.eps ^ 0.5
#use tol <- 0.001 to get the same result as with the regex for numbers like 0.9901
discard <- df$long-trunc(df$long*100)/100 < tol
df[!discard, , drop=FALSE]
#       long
# 3  7.41139
# 6 14.48333
# 7 56.99900

答案 1 :(得分:3)

您必须稍微修改正则表达式。下面的一个选择小数点后面带有三个非零数字的所有值:

new.df <- df[grep("\\.[1-9][1-9][1-9]", df$long), ]