У меня есть большой набор данных с ~ одним миллионом наблюдений, с ключом определенного типа наблюдения. В наборе данных имеется около 900 000 наблюдений с искаженными типами наблюдений, с примерно 850 (неправильными) вариациями 50 допустимых типов наблюдений.
keys <- c("DAY", "EVENING","SUNSET", "DUSK","NIGHT", "MIDNIGHT", "TWILIGHT", "DAWN","SUNRISE", "MORNING")
entries <- c("Day", "day", "SUNSET/DUSK", "DAYS", "dayy", "EVEN", "Evening", "early dusk", "late day", "nite", "red dawn", "Evening Sunset", "mid-night", "midnight", "midnite","DAY", "EVENING","SUNSET", "DUSK","NIGHT", "MIDNIGHT", "TWILIGHT", "DAWN","SUNRISE", "MORNING")
Использование gsub сродни рытью подвала ручной лопатой, а в моем случае — лопатой со сломанной ручкой, так как я новичок в r и сложных регулярных выражениях. Простой запасной вариант (для меня) состоит в том, чтобы написать по одному оператору gsub для каждого из принятых типов наблюдений, но это кажется излишне трудоемким, поскольку для этого требуется 50 операторов.
Я хотел бы использовать levenshtein.distance
или stringdist
, чтобы заменить ошибочные записи строкой кратчайшего расстояния. Запуск z <- for (i in length(y)) { z[i] = levenshtein.distance(y[i], x)}
не работает, так как он пытается передать результаты (length(x)) каждому y[i].
Как вернуть результат с минимальным расстоянием? Я видел function(x) x[2]
, который возвращает второй результат в серии, но как получить самый низкий результат?
adist()
. - person RHertel   schedule 22.10.2015