2012-02-13 20 views
17

我有字符串的矢量,并想创建一个固定的字符串。较短的弦应填充空白。例如:如何使用R的sprintf在END处创建填充空白的固定宽度的字符串?

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

但是我怎样才能得到字符串结尾的额外空格呢?

请注意,我听说gdata包中的write.fwf非常好,但在这种情况下帮助不大,因为我需要为过时的旧程序编写非常具体的非标准格式。

回答

21

添加在8前面的负号来获得一个左对齐填充串

+0

没错,但不OP要求什么。 – 2012-02-13 14:18:39

+3

它不是?他写道:“但是,我怎样才能在字符串的末尾获得额外的空白?”或者我有什么困惑? – 2012-02-13 14:29:44

+1

@DirkEddelbuettel OP在最后请求空白,所以我认为这适合 – James 2012-02-13 14:29:56

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> 

编辑:更新一旦我更好地理解@ ran2实际要求的内容。

1

的stringr包提供str_pad

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

这将产生:

[1] "fjdlksa01dada" "rau  "  "sjklf " 
相关问题