我有一个字符串向量,想要创建一个定长的字符串。短字符串应该用空格填充。例如:
c("fjdlksa01dada","rau","sjklf")
sprintf("%8s")
# returns
[1] "fjdlksa01dada" " rau" " sjklf"
但是我如何获取字符串末尾的额外空白?
请注意,我听说过gdata
软件包中的write.fwf非常好用,但在这种情况下并没有太大帮助,因为我需要编写一个非常特定的非标准格式,以供一个过时的旧程序使用。
我有一个字符串向量,想要创建一个定长的字符串。短字符串应该用空格填充。例如:
c("fjdlksa01dada","rau","sjklf")
sprintf("%8s")
# returns
[1] "fjdlksa01dada" " rau" " sjklf"
但是我如何获取字符串末尾的额外空白?
请注意,我听说过gdata
软件包中的write.fwf非常好用,但在这种情况下并没有太大帮助,因为我需要编写一个非常特定的非标准格式,以供一个过时的旧程序使用。
在数字8前面添加一个减号,以获得左对齐的填充字符串。
这几乎更像是一个标准的"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所要求的内容后进行了更新。
sprintf()
添加尾随的0
而不是空格?我目前正在将结果包装在gsub(" ", "0", ...)
中,这感觉有点麻烦。 - fdetschstringr包提供了str_pad
函数:
library(stringr)
x <- c("fjdlksa01dada","rau","sjklf")
str_pad(x, width=8, side="right")
[1] "fjdlksa01dada" "rau " "sjklf "