Мой фрейм данных имеет уродливые имена столбцов, но при отображении таблицы в моем отчете я хочу использовать их «настоящие» имена, включая специальные символы '(', новые строки, греческие буквы, повторяющиеся имена и т. д.
Есть ли простой способ заменить имена в 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)
```
Мне нужно общее решение, которое работает для обоих, если это возможно.





Я не уверен, где вы получили совет по замене rownames, но он кажется чрезмерно сложным. Намного проще просто использовать встроенный аргумент 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"))
```
(хлопает по лбу) Я думаю, что вчера я прошел слишком много кроличьих нор. Конечно, так и есть. Спасибо, что вытащили меня обратно! Ты лучший!
Спасибо за полезный ответ @Michael. В этом случае, если я не ошибаюсь, потребуется escape = FALSE. Любое предложение о фрейме данных, содержащем ячейки со специальными символами, для которых требуется, чтобы параметр escape был ИСТИННЫ?
Спасибо. Использование специальных символов в решении было очень полезным.
Комментарий @Jane необходим, который я нашел, чтобы правильно отображать LaTeX в PDF
Если вы ориентируетесь на HTML, то Δ - тоже вариант.
Я не смог получить принятый ответ для работы с HTML, поэтому использовал вышеизложенное.
Какой выходной формат вы хотите использовать для своей таблицы? HTML или PDF? Вы указываете
latexв командеkable, а затем предоставляете параметры HTML для таблицы вkable_styling.