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é.
3 réponses
Ajouter un moins devant le 8 pour obtenir une chaîne rembourrée alignée à gauche
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.
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 "