Comment utiliser r's sprintf pour créer des chaînes de largeur fixes avec fill whitespace à la fin?

j'ai un vecteur de cordes et je veux créer un fixe avec de la corde à partir de cela. Les cordes plus courtes doivent être remplies d'espaces blancs. E. g.:

c("fjdlksa01dada","rau","sjklf")
sprintf("%8s")
# returns
[1] "fjdlksa01dada" "     rau"      "   sjklf"

Mais comment puis-je obtenir les espaces à la FIN de la chaîne?

Notez que j'ai entendu parler de l'écriture.fwf de l' gdata paquet qui est vraiment sympa mais qui n'aide pas beaucoup dans ce cas, parce que j'ai besoin d'écrire un format non standard très spécifique pour un vieux programme dépassé.

19
demandé sur Bernd Elkemann 2012-02-13 18:11:17

3 réponses

Ajouter un moins devant le 8 pour obtenir une chaîne rembourrée alignée à gauche

21
répondu Bernd Elkemann 2012-02-13 14:16:39

C'est presque plus une norme "C" plutôt que de R la question relative aux printf chaînes de format. Vous pouvez même tester sur une invite de commande:

edd@max:~$ printf "[% 8s]\n" foo
[     foo]
edd@max:~$ printf "[%-8s]\n" foo
[foo     ]
edd@max:~$ 

et dans R, il fonctionne de la même pour le rembourrage gauche:

R> vec <- c("fjdlksa01dada","rau","sjklf")
R> sprintf("% 8s", vec)
[1] "fjdlksa01dada" "     rau"      "   sjklf"     
R> 

et droit

R> sprintf("%-8s", vec)
[1] "fjdlksa01dada" "rau     "      "sjklf   "     
R> 

Edit: mise à jour une fois que j'ai mieux compris ce que @ran2 demandait réellement.

10
répondu Dirk Eddelbuettel 2012-02-13 14:33:57

le paquet stringr fournit str_pad:

library(stringr)
x <- c("fjdlksa01dada","rau","sjklf")
str_pad(x, width=8, side="right")

ce qui donne:

[1] "fjdlksa01dada" "rau     "      "sjklf   "
2
répondu Ryan Thompson 2016-08-30 20:35:30