我有一个数据框,我想通过knitr和RMarkdown在HTML文件中将其输出为带有条件格式的表。例:
n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
> n
x y
1 1 0
2 1 1
3 1 0
4 1 1
5 1 0
我希望突出显示具有不同x和y值的行。因此,在这种情况下,应该是行1,行3和行5。如果HTML文件中的输出是HTML表,那将是很好的选择,但如果图像不行,也是可以的。
最佳答案
我一直想通过此功能在自己的pander package中扩展pandoc.table
,但是没有时间。但是这个问题确实令人鼓舞,可能会在接下来的几天中做到这一点。在此之前,该如何处理:
library(pander)
n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
for (i in c(1, 3, 5))
n[i, ] <- pandoc.strong.return(n[1, ])
pandoc.table(n)
pander(n) # S3 method
brew
语法的HTML:Pandoc.brew(text = '<%=n%>', output = tempfile(), convert = 'html')
更新:我已经更新了
pander
以采用一些新参数来轻松突出显示行/列/单元格。尽管我仍在研究一些辅助功能以简化此过程,但这里还是进行了一个快速演示,使您可以看到它如何帮助您的工作流程:> pandoc.table(n, emphasize.rows = c(1, 3, 5))
-------
x y
--- ---
*1* *0*
1 1
*0* *1*
1 1
*1* *0*
-------
> pandoc.table(n, emphasize.strong.cells = which(n == 1, arr.ind = TRUE))
-----------
x y
----- -----
**1** 0
**1** **1**
**1** 0
**1** **1**
**1** 0
-----------
更新:
pander
获得了一些帮助器功能,以更加轻松地突出显示表格中的单元格:> t <- mtcars[1:3, 1:5]
> emphasize.cols(1)
> emphasize.rows(1)
> pandoc.table(t)
----------------------------------------------------
mpg cyl disp hp drat
------------------- ------ ----- ------ ----- ------
**Mazda RX4** *21* *6* *160* *110* *3.9*
**Mazda RX4 Wag** *21* 6 160 110 3.9
**Datsun 710** *22.8* 4 108 93 3.85
----------------------------------------------------
或直接使用
pander
方法:> emphasize.strong.cells(which(t > 20, arr.ind = TRUE))
> pander(t)
---------------------------------------------------------
mpg cyl disp hp drat
------------------- -------- ----- ------- ------- ------
**Mazda RX4** **21** 6 **160** **110** 3.9
**Mazda RX4 Wag** **21** 6 **160** **110** 3.9
**Datsun 710** **22.8** 4 **108** **93** 3.85
---------------------------------------------------------
请注意,这些新功能尚未在CRAN上发布,但是您可以在GitHub上托管的最新版本中找到。