【发布时间】:2018-08-20 14:23:16
【问题描述】:
请考虑以下事项。我开始使用 R markdown 编写可重现的文档,并希望得到一些报告的输出。由于我正在使用多个data.frame,并且它们的列名不是很丰富或漂亮,我想在knitr::kable() 中使用col.names 参数。
问题:由于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() 创建的任何新列,方法是保持新添加的列名原样,或者在文档的开头指定它,而不会在每次该列不是时都返回错误(仍然)存在。
【问题讨论】:
标签: r r-markdown kable reproducible-research