替换 kable/R markdown 中的列名
Replace column names in kable/R markdown
我的数据框有丑陋的列名,但在我的报告中显示 table 时,我希望它们的 "real" 名称包括特殊字符“(”、新行、希腊字母、重复姓名等
是否有一种简单的方法来替换 knitr 中的名称以允许这种格式?
建议的解决方案
我试图做的是禁止打印数据框名称,并使用 add_header_above
获得更好的名称和跨越多列的名称。我看到的一些建议说要使用:
x <- kable(df)
gsub("<thead>.*</thead>", "", x)
删除列名。这很好,但问题是当我随后 add_header_above
时,原始列名又回来了。如果我在 kable(...)
中使用 col.names=rep('',times=ncol(d.df))
,名称会消失,但该行仍然存在,在我的新列名称和 table 正文之间留下间隙。这是一个代码块来说明:
```{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)
```
我不确定您从哪里得到替换行名的建议,但它似乎过于复杂。在 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 输出:
如果您的目标是 HTML,那么 Δ
也是一个选项。
我无法获得接受的答案来处理 HTML,所以使用了上面的答案。
我的数据框有丑陋的列名,但在我的报告中显示 table 时,我希望它们的 "real" 名称包括特殊字符“(”、新行、希腊字母、重复姓名等
是否有一种简单的方法来替换 knitr 中的名称以允许这种格式?
建议的解决方案
我试图做的是禁止打印数据框名称,并使用 add_header_above
获得更好的名称和跨越多列的名称。我看到的一些建议说要使用:
x <- kable(df)
gsub("<thead>.*</thead>", "", x)
删除列名。这很好,但问题是当我随后 add_header_above
时,原始列名又回来了。如果我在 kable(...)
中使用 col.names=rep('',times=ncol(d.df))
,名称会消失,但该行仍然存在,在我的新列名称和 table 正文之间留下间隙。这是一个代码块来说明:
```{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)
```
我不确定您从哪里得到替换行名的建议,但它似乎过于复杂。在 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 输出:
如果您的目标是 HTML,那么 Δ
也是一个选项。
我无法获得接受的答案来处理 HTML,所以使用了上面的答案。