在数据框的一列中,我有经度值。例如:
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因此可能会出现一些我没有注意到的明显错误!
非常感谢!
答案 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), ]