通过填充空格直到指定长度

时间:2017-06-23 21:40:17

标签: r string formatting printf string-formatting

我有一个名字的矢量,像这样:

x <- c("Marco", "John", "Jonathan")

我需要格式化它,以便通过添加前导和尾随空格使名称以10个字符的字符串为中心:

> output
# [1] "  Marco   " "   John    " " Jonathan "

我希望解决方案不如使用pasterep和计算nchar那么复杂? (可能是sprintf,但我不知道如何)。

2 个答案:

答案 0 :(得分:3)

这是一个hadoopuser@sarkar-D900C:/home/sarkar/tensorflow$ gcc hello_tf.c hello_tf.c: In function ‘main’: hello_tf.c:5:3: error: stray ‘\342’ in program printf(“Tensor flow C library version %s\n”,TF_Version()); ^ hello_tf.c:5:3: error: stray ‘\200’ in program hello_tf.c:5:3: error: stray ‘\234’ in program hello_tf.c:5:13: error:‘Tensor’ undeclared (first use in thisfunction) printf(“Tensor flow C library version %s\n”,TF_Version()); ^ hello_tf.c:5:13: note: each undeclared identifier is reported only once for each function it appears in hello_tf.c:5:20: error: expected ‘)’ before ‘flow’ printf(“Tensor flow C library version %s\n”,TF_Version()); ^ hello_tf.c:5:20: error: stray ‘\’ in program hello_tf.c:5:20: error: stray ‘\342’ in program 解决方案,它使用简单的辅助向量sprintf()来确定低边宽度。然后,我们可以使用f字符将宽度插入到我们的格式中,右侧的*可以说明名称中的奇数个字符。由于我们的最大字符宽度为10,因此每个超过10个字符的名称将保持不变,因为我们使用ceiling()调整这些宽度。

pmax()

数据:

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

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

答案 1 :(得分:0)

最终,我知道这是不一样的语言,但是值得一提的是 Python (不是R)有一个内置方法可以做到这一点,这称为居中字符串:< / p>

example = "John"
example.center(10)
#### '   john   '

它在右边添加了奇数,并允许您输入所选的填充字符。尽管它不是向量化的。