我尝试使用signif
或formatC
,但无论我使用哪个选项,都没有得到结果。我可以编写自己的函数...但是我确定有解决方案。
以下代码提供了示例数据帧。列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的小数点吗?
我不为这个解决方案感到骄傲,但是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