2012-02-13 1 views
17

У меня есть вектор строк и вы хотите создать фиксированную строку из этого. Более короткие строки должны заполняться пробелами. Например:Как использовать sprintf R для создания строк фиксированной ширины с пробелом заливки в конце?

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

Но как я могу получить дополнительные пробелы в конце строки?

Обратите внимание, что я слышал о write.fwf из пакета gdata, который действительно хорош, но в этом случае не очень помогает, потому что мне нужно написать очень специфический нестандартный формат устаревшей старой программы.

ответ

21

Добавить минус перед 8, чтобы получить выравнивание по левому краю проложенный снабжать струной, тетивой и т.п.

+0

Правда, но не о чем попросил ОП. –

+3

Это не так? Он пишет: «Но как я могу получить дополнительные пробелы в END строки?» или я что-то смутил? –

+1

@DirkEddelbuettel OP действительно просил пробел в конце, поэтому я думаю, что это соответствует – James

10

Это почти больше стандартный вопрос «C», а не R, поскольку он относится к строкам формата printf. Вы даже можете проверить это на командной строке:

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

и в R она работает так же для заполнения слева:

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

и право

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

Edit: Обновлено как только я понял, что именно @ ran2 действительно попросил.

1

Пакет stringr обеспечивает str_pad:

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

, который дает:

[1] "fjdlksa01dada" "rau  "  "sjklf "