Используйте научные обозначения только при необходимости - PullRequest
0 голосов
/ 03 июля 2018

Я печатаю следующий файл 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), но это может отключить научную запись для всех чисел, что мне не нужно: это смешно для очень маленьких чисел, таких как 1.0e-08.

Воспроизводимый пример: print(data.frame(a=1:3, b=c(1e-8, 230, 380))).

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете попробовать 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, это будет применяться к каждому столбцу и изменит тип данных на символ:

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

> data.frame(sapply(df, prettyNum))
  a     b
1 1 1e-08
2 2   230
3 3   380
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...