打印有效数字而不考虑小数点
Printing significant figures regardless of decimal point
下面的 table(平均值 ± se)包含将在出版物中呈现的真实数据。如您所见,数据范围很广。使用 R,我将所有数字四舍五入为 3 位有效数字,但我想包括尾随零以及小数点左侧的零作为重要数字以尝试保持 table 整洁。所以基本上我希望小数点两边的所有数字(包括零)都被认为是重要的,因此无论数字如何,都只打印 3 位数字。这可能吗?我试过 signif
、round
、sprintf
、options()
和 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
我们可以试试gsubfn
。在模式中,我们 select 数字包括点 ([0-9.]+
),并通过首先转换为 numeric
(as.numeric(x)
),然后 round
来替换它.
library(gsubfn)
gsubfn("[0-9.]+", ~round(as.numeric(x), 2), v1)
除了 round
ing 之外,我们用 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")
下面的 table(平均值 ± se)包含将在出版物中呈现的真实数据。如您所见,数据范围很广。使用 R,我将所有数字四舍五入为 3 位有效数字,但我想包括尾随零以及小数点左侧的零作为重要数字以尝试保持 table 整洁。所以基本上我希望小数点两边的所有数字(包括零)都被认为是重要的,因此无论数字如何,都只打印 3 位数字。这可能吗?我试过 signif
、round
、sprintf
、options()
和 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
我们可以试试gsubfn
。在模式中,我们 select 数字包括点 ([0-9.]+
),并通过首先转换为 numeric
(as.numeric(x)
),然后 round
来替换它.
library(gsubfn)
gsubfn("[0-9.]+", ~round(as.numeric(x), 2), v1)
除了 round
ing 之外,我们用 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")