Changer la longueur d'une chaine de caractères

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Louise de La Haye Saint Hilaire
Messages : 2
Enregistré le : 12 Fév 2020, 07:36

Changer la longueur d'une chaine de caractères

Messagepar Louise de La Haye Saint Hilaire » 12 Fév 2020, 07:49

Bonjour,

J'ai une base de données avec des codes postaux d'une longueur de 5 caractères. Pour les départements commençant par 0 (01000, 08000 par exemple) R a retiré le premier zéro (ce qui donne 1000 ou 8000 pour les exemples cités).

Je souhaiterais pouvoir remettre ce zéro sur l'ensemble de la base (qui est assez lourde) : auriez-vous une idée ?
Pensez-vous qu'il vaut mieux laisser ce champ en chaine de caractères ou en numérique ?

Merci par avance pour vos réponses.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Changer la longueur d'une chaine de caractères

Messagepar Eric Casellas » 12 Fév 2020, 08:45

Salut,

Si tu ne compte pas faire d'opérations math sur tes codes je dirais que le mieux c'est de les traiter comme des chaînes de caractères et pas des nombres.
Si tu peut le faire dès l'import de tes données ça te permet de ne pas perdre les 0 que tu aurais originellement dans un fichier

Et sinon si tu as déjà des nombres, tu peut via la fonction str_pad du paquet stringr les convertir en caractères et rajouter les 0 manquant

Code : Tout sélectionner

library(stringr)
str_pad(c(1,10,100,1000), 5, "left", "0")


Eric
Eric

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Changer la longueur d'une chaine de caractères

Messagepar Logez Maxime » 12 Fév 2020, 10:28

Bonjour,

si tu importes tes données avec read.table, tu peux via l'argument colClasses définir la classe de chacune de tes colonnes et forcer à ce que celle des départements soit sous forme de chaîne de caractère ce qui pourrait éviter des manipulations futures.
Tu peux aussi utiliser sprintf (qui est une fonction de base) comme alternative a str_pad :

Code : Tout sélectionner

 sprintf("%05d", c(1,10,100,1000, 1e5))
[1] "00001"  "00010"  "00100"  "01000"  "100000"

Cordialement,
Maxime

Louise de La Haye Saint Hilaire
Messages : 2
Enregistré le : 12 Fév 2020, 07:36

Re: Changer la longueur d'une chaine de caractères

Messagepar Louise de La Haye Saint Hilaire » 12 Fév 2020, 11:49

Merci pour vos conseils !
En ajoutant simplement l'argument colClasses="character" dans ma fonction d'appel cela fonctionne, les zéros sont bien là !

Bien cordialement,
Louise.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron