如何简洁地更改数字 R 变量(保持数字),例如,“-0.34”变成简单的“-.34”?
问问题
10551 次
5 回答
31
只有当你输出一个数值时,你才需要选择一个具体的表示(即数字应该如何格式化)。您不能将数值变量从“-0.34”更改为“-.34”;两者都是相同数字的表示。
但是,当您输出一个表达式时e
,您可以选择它的格式。我不知道有任何内置方法可以去掉前导“0”,但你总是可以手动删除它:
> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34))
[1] "-.34"
为方便起见,您可以定义一个函数,例如,
numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) }
于 2012-10-07T00:22:06.293 回答
12
除了现有的答案之外,我还想提一下,该包weights
有一个功能rd()
,可用于“将数字四舍五入为没有前导零的文本”。当然,结果不是数字而是字符。
library("weights")
rd(-0.341, digits=2)
[1] "-.34"
于 2014-01-30T13:17:41.873 回答
3
我需要将数字显示到小数点后 3 位。如果您想打印到任意小数位并且您不想添加另一个包(即weights
上面的包),那么这个函数(改编自@stefan 的答案)似乎可以工作:
numformat <- function(x, digits = 2) {
ncode <- paste0("%.", digits, "f")
sub("^(-?)0.", "\\1.", sprintf(ncode, x))
}
例如:
> numformat(-.232, 2)
[1] "-.23"
> numformat(-.232, 3)
[1] "-.232"
> numformat(-.232, 4)
[1] "-.2320"
于 2017-05-24T05:41:30.873 回答
2
除了@stefan 的好答案,我偶然发现了以下代码,它完成了同样的事情,但打印出更多的小数位:
f = function(X1)gsub("0\\.","\\.", X1)
于 2012-10-07T14:04:05.407 回答
2
如果它用于 R Markdown 中的报告,我使用 MOTE 包和函数 apa() 和代码:apa(-0.34, 2, FALSE)
这将在我的文档中返回 -.34。
于 2017-12-07T18:16:45.410 回答