我怎样才能在 R 中获得这种精确的格式?

How can I get this exact formatting in R?

我尝试使用 signifformatC,但无论我使用哪个选项都没有得到结果。我可以编写自己的函数...但我确信有解决方案。

以下代码提供了一个示例数据框。 a 列显示数字输入列,b 列显示预期的 "rendered" 字符输出。

数字必须四舍五入到三位有效数字(例如signif

> data.frame(a=c(1,23,456,1.23,23.46,456.78,1234),b=c("1.00","23.0","456","1.23","23.5","457","1230"))
        a    b
1    1.00 1.00
2   23.00 23.0
3  456.00  456
4    1.23 1.23
5   23.46 23.5
6  456.78  457
7 1234.00 1230

编辑:这是建议解决方案的输出:

> df <- data.frame(a=c(1,23,456,1.23,23.46,456.78,1234),b=c("1.00","23.0","456","1.23","23.5","457","1230"))
> df$c <- print(formatC(signif(df$a,digits=3), digits=3,format="fg", flag="#"))
[1] "1.00"  "23.0"  "456."  "1.23"  "23.5"  "457."  "1230."
> df
        a    b     c
1    1.00 1.00  1.00
2   23.00 23.0  23.0
3  456.00  456  456.
4    1.23 1.23  1.23
5   23.46 23.5  23.5
6  456.78  457  457.
7 1234.00 1230 1230.

我们现在可以去掉数字 456、457 和 1230 的小数点吗?

我对这个解决方案并不感到自豪,但 gsub+regex 现在可以很好地完成这项工作。

> df$c <- gsub('\.$', '',formatC(signif(df$a,digits=3), digits=3,format="fg", flag="#"))
> df
        a    b    c
1    1.00 1.00 1.00
2   23.00 23.0 23.0
3  456.00  456  456
4    1.23 1.23 1.23
5   23.46 23.5 23.5
6  456.78  457  457
7 1234.00 1230 1230

检查 VFP 包中的 Signif 函数。

VFP:::Signif(df$a, 3)
[1] "1.00" "23.0" "456"  "1.23" "23.5" "457"  "1230"