如何将科学记数法转换为小数点的十进制?

Emm*_*man 5 r tibble

虽然很基本,但我在任何地方都找不到答案:如何在小标题中禁用科学记数法,而让小标题显示小数?

我的资料

我有一个简单的 tibble,由lm() %>% broom::tidy().

library(tidyverse)

## I used dput() to get this:

tidy_lm_output <- structure(list(term = c("(Intercept)", "mood", "sleep"), estimate = c(-0.00000000000000028697849703988, 
-0.0746522106739049, 0.835867664974019), std.error = c(0.0319620048196539, 
0.0464197056030362, 0.0464197056030362), statistic = c(-0.00000000000000897873893265334, 
-1.60820086435494, 18.006742053085), p.value = c(0.999999999999993, 
0.108628280589954, 9.41480010964234e-53)), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

> tidy_lm_output
## # A tibble: 3 x 5
##  term         estimate std.error statistic   p.value
##   <chr>           <dbl>     <dbl>     <dbl>     <dbl>
## 1 (Intercept) -2.87e-16    0.0320 -8.98e-15 10.00e- 1
## 2 mood        -7.47e- 2    0.0464 -1.61e+ 0  1.09e- 1
## 3 sleep        8.36e- 1    0.0464  1.80e+ 1  9.41e-53
Run Code Online (Sandbox Code Playgroud)

奇怪的是,只有“std.error”列以小数显示,但所有其他列都以科学记数法显示。

我想让所有列都以小数显示信息,同时仍然是一个小标题。

尝试解决这个问题

  • 的首选解决方案options(scipen=999)不起作用。
  • 使用format(scientific = FALSE)也没有用。

这个问题在别处问过

H 1*_*H 1 7

您可以使用 控制打印的有效数字的数量options(pillar.sigfig = 5)

tidy_lm_output
# A tibble: 3 x 5
  term           estimate std.error   statistic    p.value
  <chr>             <dbl>     <dbl>       <dbl>      <dbl>
1 (Intercept) -2.8698e-16  0.031962 -8.9787e-15 1.0000e+ 0
2 mood        -7.4652e- 2  0.046420 -1.6082e+ 0 1.0863e- 1
3 sleep        8.3587e- 1  0.046420  1.8007e+ 1 9.4148e-53
Run Code Online (Sandbox Code Playgroud)

有关如何格式化小标题的更多信息,请参阅 help(format.tbl)

但是,如果您只想对这些数字进行四舍五入,则可以执行以下操作:

tidy_lm_output %>%
  mutate_if(is.numeric, round, 5)

# A tibble: 3 x 5
  term        estimate std.error statistic p.value
  <chr>          <dbl>     <dbl>     <dbl>   <dbl>
1 (Intercept)   0         0.0320      0      1    
2 mood         -0.0746    0.0464     -1.61   0.109
3 sleep         0.836     0.0464     18.0    0    
Run Code Online (Sandbox Code Playgroud)

  • 如果“mutate_if”被弃用(现在被标记为已被取代),“mutate_if”行的新首选语法是“mutate(across(where(is.numeric), round, 5))” (3认同)