knitr :: kable表中的灵活列名称

时间:2019-12-01 19:19:19

标签: r knitr kable columnname

问题:

具有很多变量的大df。试图创建一个汇总kable表,其表名与原始变量不同。

library(knitr)
library(dplyr)

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  |

我希望能够选择特定的列,而不必通过以下方式手动重命名:

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  |

有没有一种方法可以只指定一次,我希望“ Sepal.Length”为“ Sepal Length”。这样,如果我包含某个变量,我的代码将识别该变量并将其自动重命名为新的列名,而无需我回头手动进行操作?

1 个答案:

答案 0 :(得分:2)

为什么不重命名列,并在随后对filterselect的调用中使用格式化的列名?

library(tidyverse)

rename(iris, `Sepal length` = Sepal.Length, `Sepal width` = Sepal.Width) %>% 
  filter(Species == "setosa") %>% 
  select(contains("Sepal"), Species) %>% 
  head() %>% 
  knitr::kable()


| 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  |