如何获得R中的确切格式?

问题描述 投票:2回答:1

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

以下代码提供了示例数据帧。列a表示数字输入列,列b表示预期的“呈现”字符输出。

数字必须四舍五入为三个有效数字(例如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的小数点吗?

r format pretty-print
1个回答
0
投票

我不为这个解决方案感到骄傲,但是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
© www.soinside.com 2019 - 2024. All rights reserved.