与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致

Posted

技术标签:

【中文标题】与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致【英文标题】:Inconsistent digits beyond decimal when combined with scientific notation kableExtra table R markdown html 【发布时间】:2018-04-26 18:27:45 【问题描述】:

我的问题来自我想要以不同格式设置的列。我希望所有列上的小数点之外的位数相同,但在最后一列中,我希望科学记数法显示非常小的数字的 p 值列。我仍然希望在小数点后为科学记数法显示相同的数字。我尝试了几种数字、宽度和格式的组合,但没有给出我想要的结果。

library(kableExtra)
library(knitr)

k.table <- mlr_table3 %>%
  mutate(P_value= cell_spec((formatC(x=P_value, digits=3, width = 3, format='g', flag = "-", drop0trailing = TRUE, preserve.width = "common")), "html", color = ifelse(P_value <= 0.05, yes="red", no="blue"), escape = F)) %>% 
  mutate_if(is.numeric, function(x) 
    cell_spec((formatC(x,digits=2, width=3, format="f", flag="-", drop0trailing = FALSE)), "html")
  ) %>%
  kable("html", escape = FALSE, align = "l", caption = "Summarized linear model with SSC Data") %>%
  kable_styling(c("striped", "bordered"), full_width = F) %>%
  column_spec(1, bold = T)

print.knitr_kable(k.table)

现在表格中的数字看起来像这样......

Summarized linear model with SSC Data term estimate std.error statistic P_value (Intercept) 14.93 0.35 43.24 1.06e-173 Cortland -5.58 1.00 -5.58 3.86e-08 Fire -4.00 1.68 -2.38 0.0179 Frost -1.64 1.09 -1.51 0.132 Haral -5.32 1.09 -4.90 1.28e-06 HoneyA -4.81 1.11 -4.35 1.63e-05 HoneyB -0.97 1.09 -0.89 0.373 Sake -2.12 1.09 -1.95 0.0517 Mac -1.88 1.14 -1.65 0.1 Sweet -1.71 1.09 -1.57 0.116

【问题讨论】:

【参考方案1】:

要删除科学记数法,请使用format 并设置scientific = FALSE

> x <- 1e10
> x
[1] 1e+10
> format(x, scientific = FALSE)
[1] "10000000000"

要固定小数位数,请使用round 并设置digits

> x <- 0.0167
> round(x, digits = 2)
[1] 0.02

【讨论】:

【参考方案2】:

使用我的huxtable 包的一种方式:

library(broom)
library(huxtable)

# example data frame:
tbl <- tidy(lm(mpg ~ gear + cyl, data = mtcars)) 
ht  <- as_hux(tbl)

# 3 decimal places for columns 2-4:
number_format(ht)[, 2:4] <- 3  

# 4 significant figures, and possible scientific notation, for the p values:
number_format(ht)[, 5] <- "%.4g"

ht
##  (Intercept)   34.659   4.937   7.020    1.014e-07  
##  gear          0.652    0.904   0.721    4.766e-01  
##  cyl           -2.743   0.373   -7.344   4.324e-08  

Column names: term, estimate, std.error, statistic, p.value

您可以使用?sprintf 识别的任何东西,甚至可以定义自己的任意函数来格式化数字。在 Rmarkdown 文档中自动打印到 HTML 或 PDF。

【讨论】:

以上是关于与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致的主要内容,如果未能解决你的问题,请参考以下文章

在 R-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,

R将数据转换为gridExtra表的科学计数法

如何使用 kableextra 绘制的表格中的文本居中?

在 R 中使用带有 xtable 的科学记数法

如何将表格另存为图像,但又保持其质量? R

来自 data.table 包的 fread 无法读取小数字