22

如何简洁地更改数字 R 变量(保持数字),例如,“-0.34”变成简单的“-.34”?

4

5 回答 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 回答