Как отфильтровать числа, заканчивающиеся на .0 или .5? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь отфильтровать все данные, содержащие тарифы, которые не заканчиваются на $ .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), ]

Я хочу создать новый df, содержащий строки 3: 5

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 голосов
/ 24 января 2019

Решение с использованием базы 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)),]
0 голосов
/ 24 января 2019

Вот, пожалуйста:

library(dplyr)
dfgood <- df %>% filter((100*fare)%%50!=0)
0 голосов
/ 24 января 2019

Это 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),]
...