首页 > 解决方案 > 在 knitr::kable() 中设置自适应 col.names

问题描述

请考虑以下事项。我开始使用 R markdown 编写可重现的文档,并希望得到一些报告的输出。由于我正在使用多个,data.frame并且它们的列名不是很丰富或漂亮,我想col.names使用knitr::kable().


问题:由于data.frame它相当大并且我只想在整个报告中显示特定的列,我希望新的列名根据我选择的列自动出现。

我可以手动执行此操作,如下例所示:

library(knitr)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

knitr::kable(iris %>% head(),
             col.names = c("Sepal length", "Sepal width", "Petal length",
                           "Petal width", "Species"))

| Sepal length| Sepal width| Petal length| Petal width|Species |
|------------:|-----------:|------------:|-----------:|:-------|
|          5.1|         3.5|          1.4|         0.2|setosa  |
|          4.9|         3.0|          1.4|         0.2|setosa  |
|          4.7|         3.2|          1.3|         0.2|setosa  |
|          4.6|         3.1|          1.5|         0.2|setosa  |
|          5.0|         3.6|          1.4|         0.2|setosa  |
|          5.4|         3.9|          1.7|         0.4|setosa  |

但是,当我将其减少data.frame为仅显示某些列时,我必须col.names再次手动设置(此处删除col.names我不再需要的)以不收到错误消息:

knitr::kable(iris %>% filter(Species == "setosa") %>% 
           select(Sepal.Length, Sepal.Width, Species) %>% head(),
         col.names = c("Sepal length", "Sepal width", "Species"))

| Sepal length| Sepal width|Species |
|------------:|-----------:|:-------|
|          5.1|         3.5|setosa  |
|          4.9|         3.0|setosa  |
|          4.7|         3.2|setosa  |
|          4.6|         3.1|setosa  |
|          5.0|         3.6|setosa  |
|          5.4|         3.9|setosa  |

问题:有没有办法克服这个问题,例如switch只使用和指定一次"Sepal.Length" = "Sepal length"等?这还应该考虑到我创建的任何新列,例如通过dplyr::mutate()保持新添加的列名原样或在文档开头指定它而不在每次该列不(尚)存在时返回错误.

标签: rr-markdownkablereproducible-research

解决方案


您可以将列名修改为 data.frames 并使用列号来指定列select()

如:

library(dplyr)
colnames(iris) <- c("Sepal length", "Sepal width", "Petal length",
                           "Petal width", "Species")

knitr::kable(iris %>% head() %>% select(1,2,5), format = "markdown")    

| Sepal length| Sepal width|Species |
|------------:|-----------:|:-------|
|          5.1|         3.5|setosa  |
|          4.9|         3.0|setosa  |
|          4.7|         3.2|setosa  |
|          4.6|         3.1|setosa  |
|          5.0|         3.6|setosa  |
|          5.4|         3.9|setosa  |

reprex 包(v0.2.0.9000)于 2018 年 8 月 21 日创建。


推荐阅读