如何控制knitr kable科学记数法?

Ben*_*Ben 10 r knitr

我有一个这样的数据框:

> summary
  variable         value
1     var1  5.810390e-06
2     var2  5.018182e-06
3     var3  5.414286e-06
4     var4  3.000779e+02
5     var5 -2.105123e+01
6     var6  8.224229e-01
Run Code Online (Sandbox Code Playgroud)

我想用knitr/kable在word文档中打印它.因此我使用了以下功能:

knitr::kable(summary,
             row.names = FALSE,
             col.names = c("Variable", "Mean"))
Run Code Online (Sandbox Code Playgroud)

但结果并不令人满意:

在此输入图像描述

变量4到6我没关系,但变量1到3真的不容易这样读取...有没有办法控制这种格式?

use*_*330 8

最通用的方法是自己进行格式化,并将字符变量的数据帧发送给kable.例如,这不会给出最好的显示,但它显示了如何分别处理前3行:

df <- data.frame(variable = paste0("var", 1:6),
         value =c(5.810390e-06, 5.018182e-06, 5.414286e-06, 3.000779e+02, -2.105123e+01, 8.224229e-01))
formatted <- df
formatted$value[1:3] <- format(df$value[1:3], digits = 3)
formatted$value[4:6] <- format(df$value[4:6], digits = 3)
knitr::kable(formatted)
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

在此输入图像描述


Don*_*onJ 7

您还可以使用as.character()和signif():

# using the data frame from the previous answer:

df <- data.frame(variable = paste0("var", 1:6),
     value =c(5.810390e-06, 5.018182e-06, 5.414286e-06, 3.000779e+02, 
              -2.105123e+01, 8.224229e-01))

df %>% dplyr::mutate_if(is.numeric, funs(as.character(signif(., 3)))) %>%
    kable(.)
Run Code Online (Sandbox Code Playgroud)

这使:

|variable |value    |
|:--------|:--------|
|var1     |5.81e-06 |
|var2     |5.02e-06 |
|var3     |5.41e-06 |
|var4     |300      |
|var5     |-21.1    |
|var6     |0.822    |
Run Code Online (Sandbox Code Playgroud)