我有一个数据框,我想通过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表格,那么会很好。但是如果图像也没那么好。
答案 0 :(得分:24)
我一直希望使用此功能在我的pander package中扩展pandoc.table
,但却没有得到时间。但这个问题真的很鼓舞人心,可能会在接下来的几天里做到这一点。在那之前,怎么样:
加载包裹:
library(pander)
加载您的数据:
n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
在Pandoc中更新您的行标记为 strong :
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上托管的最新版本中找到。
答案 1 :(得分:18)
这是一个基于xtable
并带有自定义css
的解决方案。我认为解决方案很灵活,因为一旦你开始工作,如果你知道一些css技巧,你可以无限期地自定义你的html表。
我们走了。该解决方案包含3个文件:
我替换表格行颜色的css文件。
table {
max-width: 95%;
border: 1px solid #ccc;
}
th {
background-color: #000000;
color: #ffffff;
}
table tr:nth-child(odd) td{
background-color: #FF0000;
}
table tr:nth-child(even) td{
background-color: #00FFFF;
}
用于设置RStudio markdown的R脚本文件,其中包含以下内容:
options(rstudio.markdownToHTML =
function(inputFile, outputFile) {
require(markdown)
markdownToHTML(inputFile, outputFile, stylesheet='customstyle.css')
}
)
使用以下内容创建新的降价:
```{r}
source('initmd.R')
```
```{r,results='asis'}
library(xtable)
n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
print(xtable(n),type='html')
```
最后使用knit HTML
按钮将markdwon转换为html,你应该得到这样的结果: