如何在R中空格填充unicode字符串字符



我正在尝试使用sprintf()为字符填充空格(但任何基本R选项都可以(。

它对字母"a"起作用,但对"β"不起作用:

sprintf('% 2s', 'a')
#> [1] " a"
sprintf('% 2s', 'β')
#> [1] "β"
sprintf('% 3s', 'β')
#> [1] " β"

我想这与需要两个字节(即两个sprintf的"字符"(来表示"β"字符串有关。。。但是,我可以更改我的代码,使其工作,并以"β"被理解为一个字符(即一个可见字符(的方式填充空格。

首先将字符串转换为原生字符串。这在Windows上对我有效,但在https://rdrr.io/snippets/它将其.Platform$os.type报告为unix。

s <- 'β'; n <- 3 # inputs
sprintf("%*s", n, enc2native(s))  # or hard code the 3 and drop n
## [1] "  ß"

或者将paste0substring<-strrep一起使用,或者将字符串转换为X,执行sprintf,然后再转换回。这些在Windows和https://rdrr.io/snippets/。

# 2
paste0(strrep(' ', n - nchar(s)), s)
## [1] "  β"
# 3
`substring<-`(strrep(" ", n), n - nchar(s) + 1, n, s)
## [1] "  ß"
# 4
sub("X+", s, sprintf("%*s", n, strrep("X", nchar(s))))
## [1] "  β"

最新更新