2012-02-13 35 views
17

Tengo vector de cadenas y quiero crear una cadena fija con eso. Las cadenas más cortas deben rellenarse con espacios en blanco. P. ej .:¿Cómo usar el sprintf de R para crear cadenas de ancho fijo con espacios en blanco de relleno al final?

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

Pero, ¿cómo puedo obtener el espacio en blanco adicional al FINAL de la cadena?

Tenga en cuenta que escuché de write.fwf del paquete gdata, que es muy bueno, pero no ayuda mucho en este caso, porque tengo que escribir un formato no estándar muy específico para un viejo programa obsoleto.

Respuesta

21

Añadir un signo menos delante del 8 para obtener una cadena acolchado alineado a la izquierda

+0

Es cierto, pero no lo que el OP solicitó –

+3

¿No es así? Él escribe "¿Pero cómo puedo obtener el espacio en blanco adicional al FINAL de la cadena?" o tengo algo confundido? –

+1

@DirkEddelbuettel El OP pidió el espacio en blanco al final, así que creo que esto encaja en – James

10

Eso es casi más una pregunta estándar "C" que R en lo que respecta a las cadenas de formato printf. Incluso puede probar esto en un símbolo del sistema:

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

y en I funciona igual para relleno a la izquierda:

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

y derecha

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

Editar: Actualizado una vez que entendí mejor lo que realmente pidió @ ran2.

1

El paquete stringr ofrece str_pad:

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

que produce:

[1] "fjdlksa01dada" "rau  "  "sjklf " 
Cuestiones relacionadas