Как использовать R sprintf для создания строк с фиксированной шириной с пробелом заливки в END? - программирование
Подтвердить что ты не робот

Как использовать R sprintf для создания строк с фиксированной шириной с пробелом заливки в END?

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Это почти больше стандартного вопроса "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> 

и right

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

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

Ответ 3

В пакете stringr содержится str_pad:

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

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

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