仅在需要时使用科学计数法

时间:2018-07-03 16:10:28

标签: r

我正在打印以下data.frame,但我讨厌像349和57这样的数字以科学计数法打印,请参见“ 2.5%”列:

                  Mean          SD   P.value         2.5%        97.5% Time-series SE      psrf  psrf CI
b[1]        0.23852320  0.05569869 0.000 *** 1.402605e-01   0.35707199   0.0017095134 0.9999016 1.000003
b[2]        0.15168616  0.05645316 0.000 *** 4.155178e-02   0.26495673   0.0019034327 1.0031425 1.008611
b[3]        0.05807863  0.03886247 0.000 *** 3.315073e-07   0.14805463   0.0014782918 1.0053901 1.013379
b[4]        0.04353199  0.03252788 0.000 *** 2.194049e-08   0.12328049   0.0012016604 1.0023942 1.004400
Nsuper    404.22088889 30.97052370 0.000 *** 3.490000e+02 470.00000000   1.0517872620 1.0028975 1.010676
N[1]       97.52644444 24.28870256 0.000 *** 5.700000e+01 151.00000000   0.8022620656 1.0004164 1.001592
N[2]      126.41844444 22.53806189 0.000 *** 8.600000e+01 175.00000000   0.9843877604 1.0014555 1.004210

在“ 97.5%”列中可以,因为没有小数可强制使用科学计数法。 如何强制在一个vector / data.frame列中仅对需要的数字使用科学计数法?所需的结果是这样的:

                  Mean          SD   P.value         2.5%        97.5% Time-series SE      psrf  psrf CI
b[1]        0.23852320  0.05569869 0.000 ***   1.4026e-01   0.35707199   0.0017095134 0.9999016 1.000003
b[2]        0.15168616  0.05645316 0.000 ***   4.1551e-02   0.26495673   0.0019034327 1.0031425 1.008611
b[3]        0.05807863  0.03886247 0.000 ***   3.3150e-07   0.14805463   0.0014782918 1.0053901 1.013379
b[4]        0.04353199  0.03252788 0.000 ***   2.1940e-08   0.12328049   0.0012016604 1.0023942 1.004400
Nsuper    404.22088889 30.97052370 0.000 *** 349.00000000 470.00000000   1.0517872620 1.0028975 1.010676
N[1]       97.52644444 24.28870256 0.000 ***  57.00000000 151.00000000   0.8022620656 1.0004164 1.001592
N[2]      126.41844444 22.53806189 0.000 ***  86.00000000 175.00000000   0.9843877604 1.0014555 1.004210

我尝试使用options(scipen = xx),但这只能禁用 all 数字的科学计数法,我不希望这样做:对于1.0e-08这样的非常小的数字,这是荒谬的

可复制的示例:print(data.frame(a=1:3, b=c(1e-8, 230, 380)))

1 个答案:

答案 0 :(得分:1)

您可以尝试prettyNum不确定它是否可以完全解决您的问题,但确实可以为您的可重复设置使用。格式化时,所有内容都会更改为字符。确保使用的是默认的scipen,如果您已将其更改为options(scipen=999)等,则必须执行options(sicpen=NULL)才能使给定的功能正常工作。

prettyNum(x)

> prettyNum(x)
[1] "1e-12" "230"   "380"

x <- c(0.000000000001, 230, 380)

可复制集更改后进行编辑

df <- data.frame(a=1:3, b=c(1e-8, 230, 380))

您可以使用sapply进行尝试,这将适用于每一列,并将数据类型更改为character:

data.frame(sapply(df, prettyNum), stringsAsFactors=FALSE)

> data.frame(sapply(df, prettyNum))
  a     b
1 1 1e-08
2 2   230
3 3   380