簡體   English   中英

R - 使用xtable或kable創建的HTML表中的條件行突出顯示

[英]R - Conditional row highlighting in HTML table created using xtable or kable

我幾乎是以編程方式格式化R輸出的初學者,但我對knitrxtable ,Markdown和Pandoc將一種標記格式轉換為另一種格式的能力有了基本的了解。 我想要做的是將R數據幀df寫入HTML表,並將特定顏色應用於滿足條件的每一行(例如, df$outcome == 1 )。 但是,我不確定哪個包可以通過簡單有效的方式實現這一點,但是從瀏覽一些表格格式線程( xtable線程1xtable線程2kable文檔1 ),我收集了kablextable能夠完成我想要的結果。

為了澄清,這是我可重復的例子(使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM