dplyr将标签添加到表中的一组列

时间:2015-03-21 19:52:36

标签: r rstudio knitr dplyr xtable

在Rstudio中创建R降价报告时,我想让我的表格更容易理解。我已经研究过kable()和xtable(),但是我还没有找到我正在寻找的东西(或许我不知道我发现了什么)。这是我可能包含的示例表:

library(dplyr)
library(tidyr)
library(knitr)

mtcars %>% 
 group_by(gear,cyl) %>%
 summarize(count = n()) %>%
 spread(cyl,count) %>%
 kable()

这是(控制台)结果:

| gear|  4|  6|  8|
|----:|--:|--:|--:|
|    3|  1|  2| 12|
|    4|  8|  4| NA|
|    5|  2|  1|  2|

在报告中,我希望包含列名称" Cyl" (或者更好的" Cylinder")在4/6/​​8之上。否则,在复杂表中,可能不清楚这些值代表什么。

具体来说:如何在此表的开头添加一行,以显示" Cylinder"在最后三列之上?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用HTML作为输出时,htmlTable包提供了列分组:

library(dplyr)
library(tidyr)
library(htmlTable)

test <- mtcars %>% 
 group_by(gear,cyl) %>% 
 summarize(count = n()) %>%
 spread(cyl,count)

htmlTable(
    test[,-1], # data.frame
    cgroup = c("Cylinders"), # Column group labels
    n.cgroup = c(3), # Number of columns per group
    rnames = test[[1]], # Row labels
    rowlabel = "Gears" # Column header for row labels
)

Cylinders vs Gears

对于PDF输出Hmisc::latex提供了类似的语法(我很遗憾无法通过我目前正在处理的机器上缺少LaTeX来测试):

library(Hmisc)

latex(
    test[,-1], # data.frame
    cgroup = c("Cylinders"), # Column group labels
    n.cgroup = c(3), # Number of columns per group
    rowname = test[[1]], # Row labels
    rowlabel = "Gears" # Column header for row labels
)

如果你想要MS Word输出,那么就我现在看来你运气不好。

答案 1 :(得分:0)

这并不是我想要的,但我决定只更改每个列的名称。这是基本的,但对于将来看这里的任何人来说,我的代码现在看起来像这样:

library(dplyr)
library(tidyr)
library(knitr)

test <- mtcars %>% 
 group_by(gear,cyl) %>% 
 summarize(count = n()) %>%
 spread(cyl,count)

colnames(test)[2:4] <- paste(c(4,6,8),"Cylinder",sep=" ")

test %>% kable()

结果表在控制台中如下所示:

| gear| 4 Cylinder| 6 Cylinder| 8 Cylinder|
|----:|----------:|----------:|----------:|
|    3|          1|          2|         12|
|    4|          8|          4|         NA|
|    5|          2|          1|          2|