2012-02-13 7 views
17

Ho vettore di stringhe e voglio creare un fisso con una stringa fuori da quello. Le stringhe più corte devono essere riempite con spazi bianchi. Es .:Come utilizzare R sprintf per creare stringhe a larghezza fissa con spazi vuoti di riempimento alla FINE?

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

Ma come posso ottenere lo spazio bianco aggiuntivo alla FINE della stringa?

Nota che ho sentito di write.fwf dal pacchetto gdata che è veramente bello ma non aiuta molto in questo caso, perché ho bisogno di scrivere un formato non standard molto specifico per un vecchio programma obsoleto.

risposta

21

Aggiungere un segno meno davanti al 8 per ottenere una stringa imbottita allineato a sinistra

+0

vero, ma non cosa ha chiesto l'OP. –

+3

Non lo è? Scrive "Ma come posso ottenere gli spazi bianchi aggiuntivi alla fine della stringa?" o ho qualcosa di confuso? –

+1

@DirkEddelbuettel L'OP ha chiesto gli spazi bianchi alla fine, quindi penso che questo si adatti a quello – James

10

Questa è quasi più una "C" standard piuttosto che una domanda R in quanto riguarda le stringhe di formato printf. Si può anche provare questo su un prompt dei comandi:

[email protected]:~$ printf "[% 8s]\n" foo 
[  foo] 
[email protected]:~$ printf "[%-8s]\n" foo 
[foo  ] 
[email protected]:~$ 

e in R funziona lo stesso per il padding sinistro:

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

ea destra

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

Edit: Aggiornato una volta ho capito meglio cosa realmente richiesto da @ ran2.

1

Il pacchetto stringr prevede str_pad:

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

che produce:

[1] "fjdlksa01dada" "rau  "  "sjklf " 
Problemi correlati