如何在R变量中去除前导的"0."?

24

如何简洁地更改一个数值型的 R 变量(保持其数值类型),例如,"-0.34" 变为 "-.34"?

5个回答

35

只有在输出数字值时,您才需要选择具体表示形式(即数字应如何格式化)。您无法将数字变量从“-0.34”更改为“-.34”;两者都是同一个数字的表示。

但是,当您输出表达式e时,可以选择其格式。我不知道是否有内置的方法可以省略前导“0”,但您总是可以手动删除它:

> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34))
[1] "-.34"

你可以为了方便定义一个函数,例如:

numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) }

13

除了已有的回答,我想提到包weights中有一个函数rd(),可以将数字“四舍五入为没有前导零的文本”。当然,结果不是数字而是字符。

library("weights")
rd(-0.341, digits=2)
[1] "-.34"

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"

2
除了@stefan的好回答外,我偶然发现以下代码可以完成相同的事情,但打印出更多的小数位:
f = function(X1)gsub("0\\.","\\.", X1)

5
替换“0.”时需要小心,因为这会将“10.12”变成“1.12”,这显然不是想要的结果。我通过使用正则表达式““^(-?)0.””来解决这个问题。只有当零是第一个字符(除了可能的负号)时才匹配。 - stefan
谢谢你的提示,Stefan。@Manoel Galdino - 对我来说,在使用Stefan的函数后,变量仍然是数字。 - rolando2

2

如果是用于R Markdown报告,我会使用包MOET中的apa()函数和代码:apa(-0.34, 2, FALSE),这将在我的文档中返回-.34。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接