trabajar - ¿Fácil exportación y formato de tabla de dataframe R a Word?
tablas en r (3)
(Solo para decirte, soy el autor de los paquetes que te recomiendo ...)
Puede usar el paquete ReporteRs
para generar su tabla en Word. Vea aquí un tutorial (no el mío): http://www.sthda.com/english/wiki/create-and-format-word-documents-using-r-software-and-reporters-package
Los objetos FlexTable le permiten formatear y organizar tablas fácilmente con algún código R estándar. Por ejemplo, para configurar la segunda columna en negrita, el código se ve así:
myFlexTable[, 2] = textBold()
Hay ejemplos (antiguos) aquí: http://davidgohel.github.io/ReporteRs/flextable_examples.html
Estos objetos se pueden agregar a un informe de Word utilizando la función addFlexTable . El informe de palabra se puede generar con la función writeDoc
.
Si está trabajando en RStudio, puede imprimir el objeto y se representará en el visor html para que pueda exportarlo en Word cuando esté satisfecho con su contenido.
Incluso puede agregar notas al pie de Word reales (consulte el siguiente enlace) http://davidgohel.github.io/ReporteRs/pot_objects.html#pot_footnotes
Si necesita más resultados tabulares, le recomiendo también el paquete rtable
que maneja los objetos xtable
(y otras cosas que debo desarrollar para satisfacer a mis colegas o clientes) - aquí puede ver una demostración rápida:
http://davidgohel.github.io/tabular/
Espero eso ayude...
¿Existe una manera fácil de automatizar la conversión de un dataframe R a una bonita tabla de Word en formato APA para la publicación de manuscritos? Actualmente estoy haciendo esto guardando la tabla en un csv, abriendo eso en excel, copiando la tabla excel a Word y formateándola allí, pero espero que haya una manera de automatizar el formateo en R, de modo que cuando lo convierta a Word, ya estaría en formato APA, porque Word apesta a la automatización.
Básicamente, quiero continuar escribiendo el manuscrito en Word, mientras hago mis análisis en R. Luego reúno todos los resultados en R en una tabla (con un formato modificable manualmente) mediante un script y lo convierto al formato que pueda copiar. -paso a Word (para que el formato realmente se mantenga). Cuando necesito modificar la tabla, hago los cambios en R y luego simplemente ejecuto el script nuevamente sin la necesidad de hacer ningún cambio en Word.
No quiero aprender LaTeX, porque todos en mi campo usan Word con características como cambios de seguimiento, y uso el complemento de Zotero para citas, por lo que es más simple mantener la escritura separada de los análisis. Además, soy un psicólogo, no un codificador, por lo que aprender muchas nuevas tecnologías solo para esto probablemente no valga la pena el esfuerzo para mí. Normalmente, con las nuevas tecnologías surgen nuevos problemas técnicos, y mi objetivo es hacer que mi flujo de trabajo sea más rápido, pero no a costa de la imprevisibilidad (lo que puede hacer que sea más lento exactamente en el momento en que no puedo pagarlo).
Encontré una solución R + knitr + rmarkdown + pander + pandoc "con la mínima sobrecarga posible", pero aún parece ser bastante pesada porque no conozco ninguna de esas tecnologías aparte de R. Y no estoy ansioso para comenzar a aprender todo eso, ya que parece estar dirigido a escribir y todo en R hasta el final, mientras quiero separar mi escritura y mi código, nunca necesito código en mi escritura, solo las tablas de resultados. Además, en base a los ejemplos, parece recuperar los valores directamente del código R (por ejemplo, desde summary()
para crear una tabla descriptiva), mientras que necesito poder retocar mi tabla manualmente antes de convertirla, por ejemplo , escribiendo el título y las notas (como una nota específica en una celda y explicándola en la parte inferior). También encontré R2wd , pero parece ser un intento anterior para el mismo problema de "flujo de trabajo completo en R" que la solución anterior. SWord ya no parece funcionar.
¿Alguna sugerencia?
La respuesta corta es "no realmente". Nunca tuve mucha suerte de obtener tablas formateadas en MS Word. El mejor enfoque que puedo ofrecerte requiere utilizar Rmarkdown para convertir tus tablas en un archivo HTML. Puede copiar y pegar los resultados del archivo HTML en MS Word, pero no garantizo qué tan bien seguirá el formato.
Para formatear sus tablas, puede probar algo como el paquete xtable
o el paquete pixiedust
. Pero, nuevamente, no hay garantías de que el formateo se transfiera.
He tenido la misma necesidad, y he terminado usando el paquete htmlTable , que es bastante ''rentable''. Esto crea una tabla HTML (en RStudio se crea en la ventana "Visor" en la esquina inferior derecha que acabo de marcar con el mouse copiar y pegar a Word. (Comience a marcar desde la parte inferior de la tabla y arrastre el mouse hacia arriba, que forma en que está seguro de incluir el inicio del código HTML.) Word maneja estas tablas bastante bien. La sintaxis de es bastante simple y solo incluye la función htmlTable()
, pero aún puede crear tablas algo más complejas, como filas agrupadas y encabezados de columna primarios y secundarios (es decir, encabezados de columna que abarcan más de una columna). Vea los ejemplos en la viñeta .
Una nota de precaución: htmlTable no funcionará factorizará las variables, es decir, saldrán como números enteros (según los niveles de los factores). Entonces, lea los datos usando stringsAsFactors = FALSE
o as.character()
usando as.character()
.
La inclusión de ceros finales se puede hacer utilizando la función txtRound
. Ejemplo:
mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)
No es completamente sencillo asignar el formato soch como negrita o cursiva, pero se puede hacer envolviendo el contenido de la tabla en código HTML. Si, por ejemplo, desea hacer una columna completa en negrita, se puede hacer de esta manera (tenga en cuenta el uso de comillas simples e dobles dentro de paste0
):
library(plyr)
mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)
txt$x <- aaply(txt$x, 1, function(x)
paste0("<span style=''font-weight:bold''>", x, "</span")
)
htmlTable(txt)
Por supuesto, eso sería más fácil de hacerlo en Word. Sin embargo, es más interesante agregar formato a números según algunos criterios. Por ejemplo, si queremos enfatizar todos los valores de x
que son menores a 0.2 al aplicar negrita , podemos modificar el código anterior de la siguiente manera:
library(plyr)
mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)
txt$x <- aaply(txt$x, 1, function(x)
if (as.numeric(x)<0.2) {
paste0("<span style=''font-weight:bold''>", x, "</span>")
} else {
paste0("<span>", x, "</span>")
})
htmlTable(txt)
Si desea un énfasis aún más elegante, puede, por ejemplo, reemplazar la fuente en negrita por el color de fondo rojo utilizando span style=''background-color: red''
en el código anterior. Todos estos cambios se transfieren a Word, al menos en mi computadora (Windows 7).