如何过滤以.0或.5结尾的数字?

时间:2019-01-24 19:34:14

标签: r regex tidyr stringr grepl

我正在尝试过滤出包含票价不以$ .0,$。00,$。50或$ .5结尾的所有数据

票价列应始终以$.0, $.00, $.50, $.5结尾

这是我的数据的样子:

df = 
 |date      |id   |fare
1|2018-11-25|12345|5.50
2|2018-11-26|12345|2.0
3|2018-11-26|12355|2.61
4|2018-11-27|12345|12.60
5|2018-11-27|12348|22.65

我尝试使用grepl函数,但这只能解决我的问题。它包含了我想要的内容,但是却丢失了许多我期望在那里的数据。

df[grepl("\\.(?:.00$|.0$|.50$|.5$)$",df$fare), ]

我想创建一个包含3:5行的新df

dfgood = 
 |date      |id   |fare
3|2018-11-26|12355|2.61
4|2018-11-27|12345|12.60
5|2018-11-27|12348|22.65

3 个答案:

答案 0 :(得分:1)

regex应该做到

# If stored as character
df[!grepl('\\.5$|\\.0$|\\.00$|\\.50$', df$fare, perl = TRUE),]
# Else
df[!grepl('\\.5$|\\.0$|\\.00$|\\.50$', format(round(df$fare, 2), nsmall = 1), perl = TRUE),]

答案 1 :(得分:1)

使用基r的解决方案

##create some basic data
df = data.frame(date = c(1,2,3,4,5),
        id = c(12345,12345,12355,12345,12348),
        fare = c(5.5,2,2.61,12.60,22.65))


df[which(!(df$fare %% 1) %in% c(0.5,0)),]

答案 2 :(得分:0)

去那里:

library(dplyr)
dfgood <- df %>% filter((100*fare)%%50!=0)