У меня есть большой набор данных, который включает в себя поле даты рождения («dob»), но есть частые опечатки. Я пытаюсь сопоставить записи, где "dob" может быть отключен на одну или две цифры. Я не пытаюсь искать даты, близкие к «dob» (например, difftime
), потому что они могут быть опечатками в части года или месяца. Я думаю, что agrep
- это правильный инструмент, поскольку вы можете сопоставлять замены, но не можете заставить его работать так, как я хочу.
Код, с которым я пытался сопоставить даты
df <- data.frame(dob = c(as.Date("2018-01-01"), as.Date("2015-05-05"), as.Date("2011-11-11")))
df %>% filter(agrepl("2011-11-10", dob, max.distance=list(sub=2)))
возвращает строку с 2011-11-11, как я и ожидал.
Однако он возвращает совпадения только в том случае, если дата на одну цифру выключена. Даже если я установлю sub=5
, результаты, похоже, не изменятся. Я хочу совпадения, где до двух цифр могут быть неправильными. например,
df %>% filter(agrepl("2011-02-11", dob, max.distance=list(sub=2)))
все равно вернется 2011-11-11