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

时间:2017-06-02 09:30:55

标签: 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

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

knitr::kable(summary,
             row.names = FALSE,
             col.names = c("Variable", "Mean"))

但结果并不令人满意:

enter image description here

我对变量4到6没问题,但变量1到3真的不容易以这种方式阅读......有没有办法控制这种格式?

2 个答案:

答案 0 :(得分:7)

最常用的方法是自己进行格式化,并将字符变量的数据框发送给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)

这会产生以下输出:

enter image description here

答案 1 :(得分:5)

您还可以使用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(.)

给出了:

|variable |value    |
|:--------|:--------|
|var1     |5.81e-06 |
|var2     |5.02e-06 |
|var3     |5.41e-06 |
|var4     |300      |
|var5     |-21.1    |
|var6     |0.822    |