web-dev-qa-db-fra.com

Supprimer tous les caractères spéciaux d'une chaîne dans R?

Comment supprimer tous les caractères spéciaux de la chaîne dans R et les remplacer par des espaces?

Certains caractères spéciaux à supprimer sont: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

J'ai essayé regex avec le motif [:punct:] mais il ne supprime que les signes de ponctuation.

Question 2: Et comment supprimer des caractères de langues étrangères telles que: â í ü Â á ą ę ś ć?

Réponse: Utilisez [^[:alnum:]] pour supprimer~!@#$%^&*(){}_+:"<>?,./;'[]-= et utilisez [^a-zA-Z0-9] pour supprimer également â í ü Â á ą ę ś ć dans les fonctions regex ou regexpr.

86
Qbik

Vous devez utiliser des expressions régulières pour identifier les caractères indésirables. Pour le code le plus facilement lisible, vous souhaitez que le str_replace_all de la stringr package, cependant gsub à partir de la base R fonctionne aussi bien.

L'expression régulière exacte dépend de ce que vous essayez de faire. Vous pouvez simplement supprimer les caractères spécifiques que vous avez fournis dans la question, mais il est beaucoup plus facile de supprimer tous les caractères de ponctuation.

_x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")
_

(L'équivalent en base R est gsub("[[:punct:]]", " ", x).)

Une alternative consiste à échanger tous les caractères non alphanumériques.

_str_replace_all(x, "[^[:alnum:]]", " ")
_

Notez que la définition de ce qui constitue une lettre, un chiffre ou une marque de ponctuation varie légèrement en fonction de la localisation. Vous devrez donc peut-être expérimenter un peu pour obtenir exactement ce que vous voulez.

155
Richie Cotton

Au lieu d'utiliser regex pour supprimer ces caractères "fous", convertissez-les simplement en ASCII, ce qui supprimera les accents, mais conservera les lettres.

EDIT: comme dans les commentaires, il peut être nécessaire de déclarer le codage de départ de votre chaîne d'origine, généralement UTF-8

astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')

qui se traduit par

[1] "Abcdeacoauu"
21
Felipe Alvarenga

Convertir les caractères spéciaux en apostrophe,

Data  <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)

Ci-dessous le code pour supprimer extra '' 'apostrophe

Data <- gsub("''","" , Data ,ignore.case = TRUE)

Utiliser la fonction gsub(..) pour remplacer le caractère spécial par une apostrophe

4
UMESH NITNAWARE