我怎样才能在 R 中获得这种精确的格式?
How can I get this exact formatting in R?
我尝试使用 signif
或 formatC
,但无论我使用哪个选项都没有得到结果。我可以编写自己的函数...但我确信有解决方案。
以下代码提供了一个示例数据框。 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"
我尝试使用 signif
或 formatC
,但无论我使用哪个选项都没有得到结果。我可以编写自己的函数...但我确信有解决方案。
以下代码提供了一个示例数据框。 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"