Удалить все специальные символы из строки в 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(..) функция для замены специального символа апострофом

Другие вопросы по тегам