通过填充空格将字符串居中至指定长度

age*_*nis 2 string formatting printf r string-formatting

我有一个名称向量,如下所示:

x <- c("Marco", "John", "Jonathan")
Run Code Online (Sandbox Code Playgroud)

我需要通过添加前导空格和尾随空格对其进行格式化,以便名称以 10 个字符的字符串居中:

> output
# [1] "  Marco   " "   John    " " Jonathan "
Run Code Online (Sandbox Code Playgroud)

我希望有一个比paste,rep和 计数更简单的解决方案nchar?(也许可以,sprintf但我不知道如何)。

Ric*_*ven 5

这是一个sprintf()使用简单辅助向量f来确定低边宽度的解决方案。然后,我们可以使用字符将宽度插入到我们的格式中*,将ceiling()右侧的 考虑到名称中的奇数个字符。由于我们的最大字符宽度为 10,因此每个超过 10 个字符的名称将保持不变,因为我们使用 调整这些宽度pmax()

f <- pmax((10 - nchar(x)) / 2, 0)

sprintf("%-*s%s%*s", f, "", x, ceiling(f), "")
# [1] "  Marco   "  "   John   "  " Jonathan "  "Christopher"
Run Code Online (Sandbox Code Playgroud)

数据:

x <- c("Marco", "John", "Jonathan", "Christopher")
Run Code Online (Sandbox Code Playgroud)