Как использовать R sprintf для создания строк фиксированной ширины с пробелами в конце END? - PullRequest
19 голосов
/ 13 февраля 2012

У меня есть вектор строк, и я хочу создать фиксированный со строкой из этого.Более короткие строки должны быть заполнены пробелами.Например:

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

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

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

Ответы [ 3 ]

22 голосов
/ 13 февраля 2012

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

10 голосов
/ 13 февраля 2012

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

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

и в 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> 

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

2 голосов
/ 30 августа 2016

Пакет stringr предоставляет str_pad:

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

, что дает:

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