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但我不知道如何)。
这是一个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)