[英]R - Conditional row highlighting in HTML table created using xtable or kable
我幾乎是以編程方式格式化R輸出的初學者,但我對knitr
, xtable
,Markdown和Pandoc將一種標記格式轉換為另一種格式的能力有了基本的了解。 我想要做的是將R數據幀df
寫入HTML表,並將特定顏色應用於滿足條件的每一行(例如, df$outcome == 1
)。 但是,我不確定哪個包可以通過簡單有效的方式實現這一點,但是從瀏覽一些表格格式線程( xtable
線程1 , xtable
線程2 , kable
文檔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,
之后包含一個或多個參數print(dfxt,
Rmd
文檔中函數調用的Rmd
, 這個線程顯示了add.to.row
有意義的add.to.row
參數type = "latex"
,但不清楚代碼如何改變HTML輸出。另外,我不確定引用knit2html
的CSS樣式表knit2html
會覆蓋HTML表的格式。
這是使用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
> = 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)))
```
好吧,不使用顏色(不支持markdown),但是你可以使用粗體或斜體字體高亮顯示pandoc.table和一般 pander 方法的表格的單元格/行/列:
> 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*
-------------------------
我使用格式化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])
}
會讓你在表格的每一行中得到紫色(或xcolor LaTeX包中指定和允許的任何顏色)條目。 只是另一種強調條目的方式,這些條目不是基本粗體或斜體。
這不是行突出顯示,但可以為您提供進一步的可自定義選項。
*使用迎面包測試。
**您需要將此方法的任何因子列轉換為字符列。
以下是使用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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.