在Kable / R Markdown中替换列名称

时间:2018-07-19 22:21:14

标签: r r-markdown kable kableextra

我的数据框的列名很丑,但是当在报表中显示表格时,我想要它们的“真实”名称,包括特殊字符'(',换行符,希腊字母,重复的名称等。

是否有一种简单的方法来替换knitr中的名称以允许这种格式?

建议的解决方案

我试图做的是禁止打印数据帧名称,并使用add_header_above获得更好的名称和跨越几列的名称。我已经看到一些建议说要使用:

x <- kable(df)
gsub("<thead>.*</thead>", "", x) 

删除列名。很好,但是问题是当我随后add_header_above时,原始列名又回来了。如果我在col.names=rep('',times=ncol(d.df))中使用kable(...),则名称消失了,但行仍然保留,在我的新列名和表主体之间留有空隙。这是一个代码块来说明:

```{r functions,echo=T}
drawTable <- function(d.df,caption='Given',hdr.above){
require(knitr)
require(kableExtra)
require(dplyr)

hdr.2 <- rep(c('Value','Rank'),times=ncol(d.df)/2)
x <- knitr::kable(d.df,format='latex',align='c',
  col.names=rep('',times=ncol(d.df))) %>%     
kable_styling(bootstrap_options=c('striped','hover',
  'condensed','responsive'),position='center',
   font_size = 9,full_width=F)

x %>% add_header_above(hdr.2) %>%
  add_header_above(hdr.above)
}
```

```{r}
df <- data.frame(A=c(1,2),B=c(4,2),C=c(3,4),D=c(8,7))
hdr.above <- c('A2','B2','C2','D2')
drawTable(df,hdr.above = hdr.above)
```

enter image description here

2 个答案:

答案 0 :(得分:15)

我不确定您从何处获得替换行名的建议,但它似乎过于复杂。仅使用col.names中的内置kable自变量要容易得多。此解决方案适用于HTML和LaTeX输出:

---
output:
  pdf_document: default
  html_document: default
---
```{r functions,echo=T}
require(knitr)

df <- data.frame(A=c(1,2),B=c(4,2),C=c(3,4),D=c(8,7))
knitr::kable(df, 
             col.names = c("Space in name",
                           "(Special Characters)",
                           "$\\delta{m}_1$",
                           "Space in name"))

```

PDF输出enter image description here

HTML输出enter image description here

答案 1 :(得分:0)

如果您要定位HTML,那么&Delta;也是一种选择。

我无法获得可接受的答案来处理HTML,因此使用了上面的方法。