Удалить все специальные символы из строки в R?
Как удалить все специальные символы в заданной строке в R и заменить каждый специальный символ пробелом?
Специальные символы для удаления: ~!@#$%^&*(){}_+:"<>?,./;'[]-=
regex [:punct:]
собирается сделать половину работы.
Вопрос_2: Но как удалить, например, эти символы из иностранных языков: â í ü Â á ą ę ś ć
?
Ответ_2: заменить [^[:alnum:]]
с [^a-zA-Z0-9]
в regex
или же regexpr
:regex[^a-zA-Z0-9]
3 ответа
Вам необходимо использовать регулярные выражения для определения нежелательных символов. Для наиболее легко читаемого кода, вы хотите str_replace_all
от stringr
пакет, хотя gsub
из базы R работает так же хорошо.
Точное регулярное выражение зависит от того, что вы пытаетесь сделать. Вы можете просто удалить те конкретные символы, которые вы указали в вопросе, но гораздо проще удалить все знаки препинания.
x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")
(Базовый эквивалент R gsub("[[:punct:]]", " ", x)
.)
Альтернативой является замена всех не алфавитно-цифровых символов.
str_replace_all(x, "[^[:alnum:]]", " ")
Обратите внимание, что определение того, что составляет букву, цифру или знак пунктуации, немного различается в зависимости от вашей локали, поэтому вам может потребоваться немного поэкспериментировать, чтобы получить именно то, что вы хотите.
Вместо использования регулярных выражений для удаления этих "сумасшедших" символов, просто конвертируйте их в ASCII, что удалит акценты, но сохранит буквы.
РЕДАКТИРОВАТЬ: как помнят в комментариях, может быть необходимо объявить начальную кодировку вашей исходной строки, обычно это будет UTF-8
astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')
что приводит к
[1] "Abcdeacoauu"
Преобразовать специальные символы в апостроф,
Data <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)
Ниже код, чтобы удалить лишний апостроф
Data <- gsub("''","" , Data ,ignore.case = TRUE)
использование gsub(..)
функция для замены специального символа апострофом