【问题标题】:Replace column names in kable/R markdown替换 kable/R markdown 中的列名
【发布时间】:2018-12-28 04:09:28
【问题描述】:

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

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

建议的解决方案

我试图做的是抑制数据框名称的打印,并使用add_header_above 以获得更好的名称和跨越多列的名称。我看到的一些建议说要使用:

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

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

```{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)
```

【问题讨论】:

  • 您希望您的表格采用什么输出格式? HTML 还是 PDF?您在kable 命令中声明latex,然后在kable_styling 中为表格提供HTML 选项
  • 如果可能的话,我想要一个适用于两者的通用解决方案。

标签: r r-markdown kable kableextra


【解决方案1】:

我不确定您从哪里得到替换行名的建议,但它似乎过于复杂。在kable 中使用内置的col.names 参数要容易得多。此解决方案适用于 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 输出

HTML 输出

【讨论】:

  • (拍了拍额头)我想我昨天掉了太多的网络兔子洞。当然,这是方法。谢谢你把我拉回来!你是最棒的!
  • 感谢您的有用回答@Michael。在这种情况下,如果我没记错的话,就需要 escape = FALSE。对包含需要转义选项为 TRUE 的特殊字符的单元格的数据框有何建议?
  • 谢谢。在解决方案中使用特殊字符非常有帮助。
  • @Jane 的评论是必要的,我发现为了让 LaTeX 在 pdf 中正确呈现
【解决方案2】:

如果您的目标是 HTML,那么&amp;Delta; 也是一个选项。

我无法在 HTML 上获得公认的答案,因此使用了上述方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多