如何在R中突出显示knitr和kable包中的特定单元格
我有以下数据帧:如何在R中突出显示knitr和kable包中的特定单元格,r,knitr,kable,kableextra,R,Knitr,Kable,Kableextra,我有以下数据帧: library(knitr) library(kableExtra) library(dplyr) df<- structure(list(date = c("2021-04-12", "2021-04-13", "2021-04-14","2021-04-15", "2021-04-16", "Avg", "Change", &qu
library(knitr)
library(kableExtra)
library(dplyr)
df<- structure(list(date = c("2021-04-12", "2021-04-13", "2021-04-14","2021-04-15", "2021-04-16", "Avg", "Change", "Change (%)"),
Audi = c(3.3, 3.7, 6.6, 6.9, 6.8, 6.3, 0.5, 5.5),
Bmw = c(1.1, 1.7, 4.1, 4.2, 4, 3.4, -2.5, -4.1), Lexus = c(9.8, 0.3,2.3, 2.2, 2, 1.4, 1.9, 3.2)), row.names = c(NA, -8L), class = "data.frame")
我发现了一个有点类似的问题,但没有弄清楚如何在代码中实现它
mutate\u all(~cell\u spec(.x,color=ifelse(.x<0,“红色”、“绿色”))
来更改表中所有值的颜色,但是出现了一个错误
我如何解决这些问题?我让它部分工作,也许它能帮你一点忙。您可以使用跨功能选择所需的列。我尝试使用
where(is.numeric)
而不是cross(包含(c(“奥迪”、“宝马”、“雷克萨斯”)
(要简单得多),但它只适用于一种情况
my_df %>%
# across with where(is.numeric) not working
mutate(across(contains(c("Audi", "Bmw", "Lexus")), ~ifelse(date == "Avg",
cell_spec(x = .x,
background = "gray",
bold = TRUE,
escape = FALSE),
.x)),
across(contains(c("Audi", "Bmw", "Lexus")), ~ifelse(date %in% c("Change", "Change (%)"),
cell_spec(x = .x,
background = ifelse(.x < 0,
"red",
"green"),
bold = TRUE,
escape = FALSE),
.x))) %>%
kable() %>%
kable_classic(full_width = FALSE,
html_font = "Calibri")
my_df%>%
#与(is.numeric)不起作用的位置交叉
变异(包含(c(“奥迪”、“宝马”、“雷克萨斯”),~ifelse(日期=”平均值“,
单元规格(x=.x,
background=“gray”,
粗体=正确,
逃逸=假),
.x)),
跨越(包含(c(“奥迪”、“宝马”、“雷克萨斯”),~ifelse(日期%)在%c(“变更”、“变更(%)”)中),
单元规格(x=.x,
背景=ifelse(.x<0,
“红色”,
“绿色”),
粗体=正确,
逃逸=假),
.x))%>%
kable()%>%
kable_classic(全宽=假,
html_font=“Calibri”)
奇怪的是,它没有返回正确的html表。它显示:
<span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: gray !important;" >6.3</span>
6.3
对于所有单元格。它确实显示了正确的背景颜色,但html代码有点问题。我还尝试将escape=FALSE
添加到cell_spec
(在旧版中找到),但这没有任何区别。
我不知道为什么。也许这是knitr
或kableExtra
中的一个bug,但我无法正确地理解它
希望这种方法能对您有所帮助。在这篇文章中,使用了
formattable
包,但是,我需要坚持使用kable/knitr
<span style=" font-weight: bold; border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: gray !important;" >6.3</span>