R-使用xtable或kable创建的HTML表中的条件行高亮显示
我基本上是一个编程格式化R输出的初学者,但我对R-使用xtable或kable创建的HTML表中的条件行高亮显示,r,knitr,r-markdown,xtable,R,Knitr,R Markdown,Xtable,我基本上是一个编程格式化R输出的初学者,但我对knitr、xtable、Markdown和Pandoc将一种标记格式转换为另一种标记格式的能力有了基本的了解。我想做的是将R数据帧df写入HTML表,并对满足条件的每一行应用特定的颜色(例如,df$output==1)。然而,我不确定哪个软件包能够以简单有效的方式实现这一点,但通过浏览一些表格格式化线程(,),我发现kable和xtable可能能够实现我想要的结果 为了澄清,这里是我的可复制示例(使用xtable,但我对使用kable或其他软件包的
knitr
、xtable
、Markdown和Pandoc将一种标记格式转换为另一种标记格式的能力有了基本的了解。我想做的是将R数据帧df
写入HTML表,并对满足条件的每一行应用特定的颜色(例如,df$output==1
)。然而,我不确定哪个软件包能够以简单有效的方式实现这一点,但通过浏览一些表格格式化线程(,),我发现kable
和xtable
可能能够实现我想要的结果
为了澄清,这里是我的可复制示例(使用xtable
,但我对使用kable
或其他软件包的答案感兴趣):
我知道如果我要使用xtable
,我会在Rmd
文档中函数调用的print(dfxt,
部分)之后包含一个或多个参数,并显示对type=“latex”有意义的add.to.row
参数
,但不清楚HTML输出的代码将如何更改。此外,我不确定在knit2html
中引用CSS样式表是否会覆盖HTML表的格式设置。好吧,不使用颜色(因为标记不支持),但您可以使用和使用粗体或斜体字体面突出显示表格的单元格/行/列:
> library(pander)
> emphasize.rows(which(df$outcome == 2))
> pander(df)
-------------------------
id inputval outcome
---- ---------- ---------
29 0.89 1
*79* *0.69* *2*
*41* *0.64* *2*
*89* *1* *2*
95 0.66 1
5 0.71 1
53 0.54 1
*90* *0.6* *2*
*56* *0.29* *2*
46 0.14 4
96 0.97 1
*46* *0.91* *2*
68 0.69 4
58 0.8 1
11 0.02 3
90 0.48 1
25 0.76 1
5 0.21 4
33 0.32 4
*96* *0.23* *2*
-------------------------
下面是一个使用
Gmisc::htmlTable
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
cols <- with(df, ifelse(outcome == 1, 'magenta', 'white'))
library(Gmisc)
htmlTable(as.matrix(df), altcol = cols,
rgroup = '', n.rgroup = rep(1, length(cols)))
它还提供:
你的降价代码就是
```{r, results='asis'}
htmlTable(as.matrix(df), altcol = cols,
rgroup = '', n.rgroup = rep(1, length(cols)))
```
我的.Rmd看起来像:
---
output:
html_document:
css: ~/knitr.css
---
```{r, results='asis', message=FALSE}
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
cols <- with(df, ifelse(outcome == 1, 'magenta', 'white'))
library(Gmisc)
htmlTable(as.matrix(df), altcol = cols,
rgroup = '', n.rgroup = rep(1, length(cols)))
```
---
输出:
html_文件:
css:~/knitr.css
---
```{r,results='asis',message=FALSE}
种子集(123)
df这里有一个使用ReporteRs
的解决方案:
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
library( ReporteRs )
library( magrittr )
# create and format table
myft = df %>% FlexTable() %>%
setRowsColors( df$outcome == 1, 'magenta') %>%
setFlexTableWidths( c( 1, 1, 1) )
# create an html doc and send myft into
doc = bsdoc() %>% addFlexTable( myft )
# write the html file in a new dir
writeDoc( doc, "example_out/df.html")
set.seed(123)
df%FlexTable()%%>%
setRowsColors(df$outcome==1,'洋红')%>%
设置FlexTableWidths(c(1,1,1))
#创建html文档并将myft发送到
doc=bsdoc()%%>%addFlexTable(myft)
#在新目录中写入html文件
writeDoc(doc,“example_out/df.html”)
我在格式化RMarkdown文档方面做了大量工作
由于RMarkdown在生成结束PDF之前转换为LaTeX,因此可以将在LaTeX中工作的参数传递给RMarkdown。
所以,加上
header-includes:
- \usepackage{xcolor}
在RMarkdown文档的标题中,然后添加
for(i in seq(1, nrow(yourDataframe), by = 2)){
yourDataframe[i, ] <- paste0("\\color{purple}", yourDataframe[i, ])
row.names(yourDataframe)[i] <- paste0("\\color{purple}", row.names(yourDataframe)[i])
}
for(i在seq(1,nrow(yourDataframe),by=2)中){
yourDataframe[i,]太棒了!不过有一个问题。由于我使用的是带有多种类型向量的data.frame,所以我将as.matrix(df)
更改为df
,现在第一列是表名(df)并包含行号。我如何删除此行号列?谢谢。rownames(df)太好了,谢谢。另外,我可以指定一个.css文件,htmlTable从中读取并应用正确的格式吗?我有一个.css文件,它应用于HTML页面的其余部分,并且希望表格具有统一的格式,当然,突出显示不同颜色的行除外。看起来像tablecsclass=“table tr”
可能从我调用的CSS模板knit2HTML
继承表tr
CSS,但我看到我的表仍然显示以下类:类“htmlTable”,“字符”原子[1:1]哦,我明白了。我不确定这一点。我通常使用yaml前端处理css,请参阅编辑和。tr格式嵌入在htmlTable生成的html中,您可以cat(htmlTable(df))
查看。不确定TableCSClass为什么会出错that@CyrusMohammadian我补充了另一个问题,因为这个问题有点不同,但我不认为有直接/简单的方法
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
library( ReporteRs )
library( magrittr )
# create and format table
myft = df %>% FlexTable() %>%
setRowsColors( df$outcome == 1, 'magenta') %>%
setFlexTableWidths( c( 1, 1, 1) )
# create an html doc and send myft into
doc = bsdoc() %>% addFlexTable( myft )
# write the html file in a new dir
writeDoc( doc, "example_out/df.html")
header-includes:
- \usepackage{xcolor}
for(i in seq(1, nrow(yourDataframe), by = 2)){
yourDataframe[i, ] <- paste0("\\color{purple}", yourDataframe[i, ])
row.names(yourDataframe)[i] <- paste0("\\color{purple}", row.names(yourDataframe)[i])
}