132 votes

Formatez le nombre en tant que largeur fixe, avec des zéros en tête.

Le code suivant

a <- seq(1,101,25)
b <- paste("name", 1:length(a), sep = "_")

produit cette sortie :

"name_1"  "name_26"  "name_51"  "name_76"  "name_101"

J'aimerais que toutes les valeurs aient la même largeur, ce qui signifie que je dois remplir les valeurs avec des zéros comme ceci :

"name_001"  "name_026"  "name_051"  "name_076"  "name_101"

Comment je gère ça ?

(Cette question est liée à <a href="https://stackoverflow.com/questions/8260808/transpose-reshape-rows-in-coloums-with-given-conditions">celui-ci </a>.)

218voto

Andrie Points 66979

Il existe plusieurs solutions à ce problème.

L'une d'entre elles consiste à utiliser sprintf . Cela utilise C des codes de formatage de style incorporés dans une chaîne de caractères pour indiquer le format de tout autre argument qui lui est passé. Par exemple, le code de formatage %3d signifie formater un nombre comme un entier de largeur 3 :

a <- seq(1,101,25)
sprintf("name_%03d", a)
[1] "name_001" "name_026" "name_051" "name_076" "name_101"

Un autre est formatC y paste :

paste("name", formatC(a, width=3, flag="0"), sep="_")
[1] "name_001" "name_026" "name_051" "name_076" "name_101"

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