我正在打印以下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)))
。
答案 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