В R, как мне заменить строку, которая содержит определенный рисунок другой строкой?

StackOverflow https://stackoverflow.com/questions/5302669

  •  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 для некоторых ключевых терминов.

http://en.wikipedia.org/wiki/approximate_string_matching

Сначала вы могли бы сопоставить специальность со списком доступных специальностей, любое не совпадение, тогда будет вероятным 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top