我几乎是以编程方式格式化R输出的初学者,但我对knitr
,xtable
,Markdown和Pandoc将一种标记格式转换为另一种格式的能力有了基本的了解。我想要做的是将R数据帧df
写入HTML表格,并将特定颜色应用于满足条件的每一行(例如df$outcome == 1
)。但是,我不确定哪个包可以通过简单有效的方式完成此任务,但是通过浏览一些表格格式线程(xtable
thread 1,xtable
thread 2,kable
documentation 1),我已经我认为kable
和xtable
可能会达到我想要的结果。
为了澄清,这是我可重复的示例(使用xtable
,但我对使用kable
或其他包的答案感兴趣):
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(xtable)
dfxt <- xtable(df)
knit2html(input = "~/rowcolor_ex.Rmd",
output = OUTPUTHERE
stylesheet = "STYLESHEET.css")
knit2html
引用名为“rowcolor_ex.Rmd”的文件,如下所示:
```{r,echo=FALSE,results='asis',warning=FALSE,message=FALSE}
print(dfxt,
type = "html",
include.rownames = FALSE,)
```
我理解如果我要使用xtable
,我会在print(dfxt,
文档中的Rmd
部分函数调用之后包含一个或多个参数,并{{1} 3}}显示了对add.to.row
有意义的type = "latex"
参数,但不清楚HTML输出的代码会如何变化。另外,我不确定引用knit2html
中的CSS样式表是否会覆盖HTML表的格式。
答案 0 :(得分:15)
以下是使用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)))
修改强>
由于htmlTable
已移至包htmlTable
,且不再位于Gmisc
&gt; = 1.0,因此新的方法是
library('htmlTable')
htmlTable(as.matrix(df), col.rgroup = 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)))
```
答案 1 :(得分:5)
好吧,不使用颜色(不支持降价),但您可以使用粗体pandoc.table和general pander method >或斜体字体:
> 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*
-------------------------
答案 2 :(得分:2)
我使用格式化RMarkdown文档玩了很多。
由于RMarkdown在生成结束PDF之前转换为LaTeX,因此您可以将在LaTeX中工作的参数传递给RMarkdown。 所以,添加
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])
}
会在表格的每一行中为您提供紫色(或xcolor LaTeX包中指定和允许的任何颜色)条目。只是另一种强调条目的方式,这些条目不是基本的粗体或斜体。
这不是行突出显示,但可以为您提供进一步的自定义选项。
*使用pander包进行测试。
**您需要将此方法的任何因子列转换为字符列。
答案 3 :(得分:1)
以下是使用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")