Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-使用xtable或kable创建的HTML表中的条件行高亮显示_R_Knitr_R Markdown_Xtable - Fatal编程技术网

R-使用xtable或kable创建的HTML表中的条件行高亮显示

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或其他软件包的

我基本上是一个编程格式化R输出的初学者,但我对
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])
}