打印有效数字,无论小数点

时间:2016-06-20 04:24:48

标签: r rounding standard-error significant-digits

下表(平均值±se)包含将在出版物中呈现的真实数据。如您所见,数据范围非常广泛。使用R,我将所有数字四舍五入为3位有效数字,但我想在小数点左侧包含尾随零和零,这对于保持表格整洁非常重要。所以基本上我想要小数点两边的所有数字,包括零,被认为是重要的,因此无论数字如何,只打印3位数。这可能吗?我尝试了signifroundsprintfoptions()formatC,但没有成功。 这些结果是使用x$summary = paste(signif(x$Value, digits=3), "\u00b1", signif(x$se, digits=3))

获得的
35.2 ± 3.13 > this is good
124 ± 14.8 > this is good
196 ± 6.53 > this is good
1.34 ± 0.0505 > I would like this to become 1.34 ± 0.05
0.0443 ± 0.00386 > I would like this to become 0.04 ± 0.00
123 ± 0.0067 > I would like this to become 123 ± 0.01

1 个答案:

答案 0 :(得分:2)

我们可以尝试使用gsubfn。在模式中,我们选择包含点([0-9.]+)的数字,然后首先转换为numericas.numeric(x)),然后round替换它。

library(gsubfn)
gsubfn("[0-9.]+", ~round(as.numeric(x), 2), v1)

除了round之外,我们还会使用substr

删除多余的字符
gsubfn("[0-9.]+", ~substr(round(as.numeric(x), 3), 1, 4), v1)

或使用sprintf格式化round ded数字,然后用sub替换额外的尾随零。

sub("\\.0+\\s|0\\s", " ", gsubfn("[0-9.]+", ~sprintf("%.2f", 
        round(as.numeric(x), 2)), v1))
#[1] "35.2 ± 3.13" "124 ± 14.80" "196 ± 6.53"  "1.34 ± 0.05" "0.04 ± 0.00" "123 ± 0.01" 

数据

v1 <- c("35.2 ± 3.13", "124 ± 14.8", "196 ± 6.53", "1.34 ± 0.0505", 
                    "0.0443 ± 0.00386", "123 ± 0.0067")