2012-02-13 18 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 " 
相關問題