sheet - Crea tablas con formato condicional con RMarkdown+knitr
r markdown tutorial pdf (2)
Aquí una solución basada en xtable
con un css
personalizado. Creo que la solución es flexible, ya que una vez que la consiga funcionará, puede personalizar sus tablas html indefinidamente si conoce algunos trucos de CSS.
Aquí vamos. La solución consiste en 3 archivos:
Un archivo css donde alterno el color de la fila de la tabla.
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; }
un archivo de secuencia de comandos R para establecer RStudio markdown con el siguiente contenido:
options(rstudio.markdownToHTML = function(inputFile, outputFile) { require(markdown) markdownToHTML(inputFile, outputFile, stylesheet=''customstyle.css'') } )
Crea una nueva rebaja con lo siguiente:
```{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'') ```
finalmente, convierte el markdwon a html usando el botón knit HTML
y deberías obtener algo como esto:
Tengo un marco de datos y quiero mostrar esto en un archivo HTML a través de knitr y RMarkdown como una tabla con formato condicional. Ejemplo:
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
Quiero que las filas con diferentes valores de x e y estén resaltadas. Entonces, en este caso, serían las filas 1, 3 y 5. Estaría bien si la salida en el archivo HTML fuera una tabla HTML, pero si falla una imagen también estaría bien.
Siempre quise extender pandoc.table
en mi paquete pander con esta característica, pero no conseguí el tiempo para eso. Pero esta pregunta es realmente inspiradora, probablemente lo hará en los próximos días. Hasta entonces, ¿qué pasa con:
Cargue el paquete:
library(pander)
Carga tus datos:
n <- data.frame(x = c(1,1,1,1,1), y = c(0,1,0,1,0))
Actualice sus líneas para que sean marcadas como fuertes en Pandoc:
for (i in c(1, 3, 5)) n[i, ] <- pandoc.strong.return(n[1, ])
Muestra la versión markdown de tu tabla:
pandoc.table(n) pander(n) # S3 method
Convierta el markdown a, por ejemplo, HTML con sintaxis de
brew
:Pandoc.brew(text = ''<%=n%>'', output = tempfile(), convert = ''html'')
Actualización: he actualizado pander
para tomar algunos nuevos argumentos para resaltar filas / columnas / celdas fácilmente. Aunque todavía estoy trabajando en algunas otras funciones de ayuda para facilitar este proceso, aquí va una demostración rápida para que pueda ver cómo podría ayudar a su flujo de trabajo:
> 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
-----------
Actualización: pander
obtuvo algunas funciones de ayuda para resaltar las celdas en las tablas aún más fácilmente:
> 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
----------------------------------------------------
O directamente con el método 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
---------------------------------------------------------
Tenga en cuenta que estas nuevas funciones aún no están publicadas en CRAN, pero puede encontrarlas en la versión más reciente alojada en GitHub .