У меня есть большой набор данных с ~ миллионами наблюдений с ключом определенного типа наблюдения. В наборе данных имеется ~ 900 000 наблюдений с искаженными типами наблюдений с ~ 850 (неправильными) вариациями 50 приемлемых типов наблюдений.r stringdist или levenshtein.distance для замены строк
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 сродни рытье фундамента с ручной лопатой, и в моем случае, сломанная рукоять лопаты, как я очень новый с г и тонкостями регулярных выражений. Простой резерв (для меня) заключается в том, чтобы написать один оператор 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]
, который возвращает 2-й результат в серии, но как получить самый низкий?
Вы можете захотеть взглянуть на документацию 'adist()'. – RHertel
Вам необходимо указать, какое совпадение вы считаете правильным при сравнении «SUNSET» и «DUSK» с «SUNSET/DUSK», –
«SUNSET/DUSK» следует оценить с помощью метода «SUNSET» с дистанционным методом. Характер набора данных не позволяет мне определить, подходит ли «DUSK» или «SUNSET». , –