В R, как мне заменить строку, которая содержит определенный рисунок другой строкой?
-
24-10-2019 - |
Вопрос
Я работаю над проектом, включающим очистку списка данных по специальностям колледжа. Я нахожу, что многого неправильно, поэтому я хотел использовать функцию gsub()
Чтобы заменить сфотографированные, на его правильное правописание. Например, скажем, «Биолги» сформулируется в списке майоров, называемых майором. Как я могу получить R, чтобы обнаружить ошибку и заменить его правильным написанием? я пытался gsub('biol', 'Biology', Major)
Но это только заменяет первые четыре буквы в «Биолги». Если я сделаю gsub('biolgy', 'Biology', Major)
, он работает только для этого случая, но не обнаруживает другие формы ошибок «биологии».
Благодарю вас!
Решение
Вы должны либо определить какое -то отличное регулярное выражение, либо использовать agrep
из base
упаковка. stringr
Пакет-это еще один вариант, я знаю, что люди используют его, но я очень большой поклонник регулярных выражений, так что это нет-нет для меня.
Тем не мение, agrep
должен сделать свое дело:
agrep("biol", "biology")
[1] 1
agrep("biolgy", "biology")
[1] 1
РЕДАКТИРОВАТЬ:
Вы также должны использовать ignore.case = TRUE
, но будьте готовы сделать какую -то бухгалтерскую "вручную" ...
Другие советы
Вы можете настроить вектор всех возможных ошибок, а затем сделать петлю по вызову GSUB. Что-то типа:
biologySp = c("biolgy","biologee","bologee","bugs")
for(sp in biologySp){
Major = gsub(sp,"Biology",Major)
}
Если вы хотите сделать что -нибудь умнее, посмотрите, есть ли какие -нибудь нечеткие соответствующие пакеты на Cran, или что -то, что использует сопоставление Soundex '....
Страница Википедии на ок. Сопоставление строк может быть полезно, и попробуйте найти R-HELP для некоторых ключевых терминов.
Сначала вы могли бы сопоставить специальность со списком доступных специальностей, любое не совпадение, тогда будет вероятным Missspellings. Затем используйте функцию соглашения, чтобы снова сопоставить их с известными специальностями (соглашение делает приблизительное соответствие, поэтому, если она аналогична правильному значению, вы получите совпадение).
У пакета VWR есть методы для сопоставления строк:
http://ftp.heanet.ie/mirrors/cran.r-project.org/web/packages/vwr/index.html
Таким образом, вашим лучшим выбором может быть использование строки с минимальным расстоянием Levenshtein от возможных предметных строк:
> levenshtein.distance("physcs",c("biology","physics","geography"))
biology physics geography
7 1 9
Если у вас идентичные минимумы, переверните монету:
> levenshtein.distance("biolsics",c("biology","physics","geography"))
biology physics geography
4 4 8
Пример 1a) regex perl/linux: 's/oldstring/newstring/'
Пример 1b) r эквивалент 1А: srcstring=sub(oldstring, newstring, srcstring)
Пример 2a) regex perl/linux: 's/oldstring//'
Пример 2b) r эквивалент 2А: srcstring=sub(oldstring, "", srcstring)