211 votes

Comment supprimer tous les espaces blancs d'une chaîne de caractères en R ?

Ainsi, " xx yy 11 22 33 " deviendra " xxyy112233 ". Comment puis-je réaliser cela ?

319voto

Aniko Points 7555

Il existe de nombreuses façons de le faire. Par exemple :

gsub(" ","", " xx yy 11 22 33 " , fixed=TRUE)
[1] "xxyy112233"

Edit : Comme l'a fait remarquer DWin dans les commentaires, la fixed=TRUE n'est pas vraiment nécessaire. Elle indique à R que vous lui donnez une chaîne fixe au lieu d'une expression régulière. Vous pouvez rendre cette substitution plus générale en utilisant une expression régulière avec le paramètre \s qui supprime tous les espaces blancs, y compris les nouvelles lignes et les tabulations :

> gsub("\\s","", " xx yy 11\n22\t 33 ")
[1] "xxyy112233"

Ici, la première barre oblique "échappe" à la seconde de sorte qu'elle est interprétée comme une barre oblique, et la chaîne comporte une nouvelle ligne et un caractère de tabulation en plus des espaces.

2 votes

@Aniko. Y a-t-il une raison pour laquelle vous avez utilisé fixed=TRUE ?

2 votes

@DWin Supposément, c'est plus rapide si R sait qu'il n'a pas à invoquer le truc des expressions régulières. Dans ce cas, cela ne fait pas vraiment de différence, j'ai juste l'habitude de le faire.

1 votes

Y a-t-il une différence entre "[[:space:]]" et "\\s" ?

33voto

JollyRoger Points 68

Je viens d'apprendre l'existence du paquet "stringr" pour supprimer les espaces blancs du début et de la fin d'une chaîne de caractères avec str_trim( , side="both") mais il possède également une fonction de remplacement pour que :

a <- " xx yy 11 22 33 " 
str_replace_all(string=a, pattern=" ", repl="")

[1] "xxyy112233"

4 votes

Le paquet stringr ne fonctionne pas bien avec tous les encodages. Le paquet stringi est une meilleure solution, pour plus d'informations, voir github.com/Rexamine/stringi

22voto

ZWL Points 101
x = "xx yy 11 22 33"

gsub(" ", "", x)

> [1] "xxyy112233"

21voto

Avinash Raj Points 23485

Utilisez [[:blank:]] pour correspondre à n'importe quel type de caractères horizontaux d'espace blanc.

gsub("[[:blank:]]", "", " xx yy 11 22  33 ")
# [1] "xxyy112233"

10voto

bartektartanus Points 2472

Veuillez noter que les soultions écrites ci-dessus ne suppriment que les espaces. Si vous voulez également supprimer la tabulation ou la nouvelle ligne, utilisez stri_replace_all_charclass de stringi paquet.

library(stringi)
stri_replace_all_charclass("   ala \t  ma \n kota  ", "WHITE_SPACE", "")
## [1] "alamakota"

5 votes

stringi est maintenant sur CRAN, profitez-en ! :)

1 votes

Cette commande ci-dessus est incorrecte. La bonne méthode est stri_replace_all_charclass(" ala \t ma \n kota ", " \\p {WHITE_SPACE}", "")

5 votes

Après avoir utilisé stringi depuis quelques mois maintenant et j'ai vu/appris à quel point il est puissant et efficace, il est devenu mon paquet de référence pour les opérations sur les chaînes de caractères. Vous avez fait un travail formidable avec lui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X