2015-08-14 70 views
6

C'è un modo semplice per automatizzare la conversione di un dataframe R in una bella tabella di Word in formato APA per la pubblicazione di manoscritti? In questo momento sto salvando la tabella in un csv, aprendola in Excel, copiando la tabella excel in Word e formattandola lì, ma spero che ci sia un modo per automatizzare la formattazione in R, in modo che quando lo converto in Word, sarebbe già in formato APA, perché Word fa schifo nell'automatizzazione.Facile esportazione e formattazione della tabella di R dataframe in Word?

Fondamentalmente, voglio continuare a scrivere il manoscritto stesso in Word, mentre faccio le mie analisi in R. Quindi raccogli tutti i risultati in R in una tabella (con formattazione modificabile manualmente) da uno script e convertirlo in qualsiasi formato I potrebbe quindi semplicemente copiare e incollare in Word (in modo che la formattazione sia effettivamente valida). Quando ho bisogno di modificare la tabella, vorrei apportare le modifiche in R e quindi basta eseguire nuovamente lo script senza la necessità di apportare modifiche in Word.

Non voglio imparare LaTeX, perché tutti nel mio campo usano Word con funzionalità come le modifiche alla traccia e utilizzo il componente aggiuntivo Zotero per le citazioni, quindi è più semplice mantenere la scrittura separata dalle analisi. Inoltre, sono uno psicologo, non un programmatore, quindi imparare un sacco di nuove tecnologie solo per questo probabilmente non vale la pena per me. Tipicamente con le nuove tecnologie arrivano nuovi problemi tecnici e sto mirando a rendere il mio flusso di lavoro più veloce, ma non a costo di imprevedibilità (che potrebbe renderlo più lento esattamente nel momento in cui non posso permettermelo).

Ho trovato un R+knitr+rmarkdown+pander+pandoc solution "con il più piccolo overhead possibile", ma sembra essere abbastanza pesante ancora perché non conosco nessuna di queste tecnologie oltre a R. E non sono desideroso di iniziare a imparare tutto ciò , poiché sembra essere finalizzato a fare la scrittura e tutto in R fino alla fine, mentre voglio separare la mia scrittura e il mio codice - non ho mai avuto bisogno del codice nella mia scrittura, solo le tabelle dei risultati. Inoltre, in base agli esempi, sembra che recuperi i valori direttamente dal codice R (ad esempio, da summary() per creare una tabella descrittiva), mentre devo essere in grado di armeggiare manualmente con la mia tabella prima di convertirla, ad esempio, scrivendo il titolo e le note (come una nota specifica per una cella e la spiegazione in basso). Ho anche trovato R2wd, ma sembra essere un tentativo più vecchio per lo stesso problema "tutto il flusso di lavoro in R" come la soluzione sopra. SWord sembra non funzionare più.

Qualche suggerimento?

+0

yo puoi usare kable da knitr 'library (knitr)' 'kable (mtcars, format =" html ")' quindi incollalo in word. – jeremycg

+0

Raccomanda che le domande di una biblioteca siano fuori tema, quindi vota per chiudere. Ci sono molte scelte Puoi anche consultare https://cran.r-project.org/web/packages/rtf/index.html.Personalmente, in questa situazione io uso 'brew' con' xtable' per generare una versione HTML e usare [CSS derivati ​​dallo stile di Word] (http://superuser.com/questions/148884/is-there-a-way-to- export-word-styles-as-css) con copia e incolla. –

risposta

5

Ho avuto lo stesso bisogno, e ho finito per utilizzare il pacchetto htmlTable, che è abbastanza 'conveniente'. Questo crea una tabella HTML (in RStudio viene creata nella finestra "Viewer" in basso a destra che contrassegno semplicemente usando il mouse copia-incolla su Word. (Inizia a segnare il modulo nella parte inferiore della tabella e trascina il mouse verso l'alto, In questo modo si è sicuri di includere l'inizio del codice HTML.) Word gestisce queste tabelle abbastanza bene. La sintassi di è abbastanza semplice coinvolge solo la funzione htmlTable(), ma è ancora in grado di rendere le tabelle un po 'più complesse, come le righe raggruppate e primarie e intestazioni delle colonne secondarie (cioè intestazioni delle colonne che abbracciano più di una colonna) Controlla gli esempi nella vignette

una nota di cautela:.. HtmlTable non funziona sarà fattore variabili, vale a dire, verranno visualizzati come numeri interi (in base ai livelli dei fattori). Quindi leggi i dati usando stringsAsFactors = FALSE o convertili usando as.character().

L'inclusione degli zeri finali può essere eseguita utilizzando la funzione txtRound. Esempio:

mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE) 
txt <- txtRound(mini_table, 2) 

Non è del tutto semplice per assegnare formattazione soch come grassetto o corsivo, ma può essere fatto avvolgendo il contenuto della tabella nel codice HTML. Se per esempio volete fare un'intera colonna in grassetto, si può fare in questo modo (si prega di notare l'uso di virgolette singole e doppie virgolette all'interno 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) 

Naturalmente, che sarebbe più facile da al Parola. Tuttavia, è più interessante aggiungere la formattazione ai numeri in base ad alcuni criteri. Per esempio, se vogliamo sottolineare tutti i valori di x che sono meno dello 0,2 applicando grassetto, possiamo modificare il codice precedente come segue:

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) 

Se si desidera ancora più elaborato enfasi, è possibile per istanza sostituire il carattere in grassetto con il colore di sfondo rosso utilizzando span style='background-color: red' nel codice sopra. Tutti questi cambiamenti vengono trasferiti su Word, almeno sul mio computer (Windows 7).

+0

Questa soluzione sembra abbastanza semplice per il mio scopo, ma ho un paio di domande. Innanzitutto, sembra che quando si stampa nel visualizzatore, perdo gli zeri finali (sono ancora visibili se stampati nella console). Sai come impedire che ciò accada? Secondo, è possibile formattare ulteriormente la tabella html in R? Ad esempio, sarebbe utile avere alcune celle in grassetto o note aggiunte (con lettere in apice). – RandomMonitor

+0

@RandomMonitor Lo zero finale è semplice, basta avvolgere la tabella nella funzione 'txtRound' (parte di htmlTables). Mini esempio: 'mini_table <- data.frame (Nome =" A ", x = 4, y = 9, stringheAsFactors = FALSE); htmlTable (txtRound (mini_table, 2)) '. Per quanto riguarda la formattazione extra (ad esempio grassetto), è più difficile, ma possibile. Aggiornerò la mia risposta –

+0

Non credo che la soluzione qui descritta per il grassetto di determinati testi sia più valida. Invece di mettere in grassetto il testo nella colonna 'x', ora stampa semplicemente il contenuto della colonna tra i tag di formattazione' 'e' '. – graggsd

0

La risposta breve è "non proprio". Non ho mai avuto molta fortuna nell'ottenere tabelle ben formattate in MS Word. L'approccio migliore che posso offrire richiede l'utilizzo di Rmarkdown per il rendering delle tabelle in un file HTML. È possibile copiare e incollare i risultati del file HTML in MS Word, ma non sono in grado di garantire la validità della formattazione.

Per formattare le tabelle, è possibile provare qualcosa come il pacchetto xtable o il pacchetto pixiedust. Ma ancora una volta, non garantisce che la formattazione verrà trasferita.

7

(Solo per farvi sapere, io sono l'autore dei pacchetti vi consiglio ...)

È possibile utilizzare il pacchetto ReporteRs per riversare il tavolo a Word. Vedi qui un tutorial (non mia): http://www.sthda.com/english/wiki/create-and-format-word-documents-using-r-software-and-reporters-package

oggetti FlexTable consentono di formattare e organizzare tavoli facilmente con un codice R standard. Ad esempio, per impostare la seconda colonna in grassetto, il codice è simile:

myFlexTable[, 2] = textBold() 

Ci sono (vecchi) esempi qui: http://davidgohel.github.io/ReporteRs/flextable_examples.html

Questi oggetti possono essere aggiunti a un report Word utilizzando la funzione addFlexTable . Il report di parole può essere generato con la funzione writeDoc.

Se si lavora in RStudio, è possibile stampare l'oggetto e renderlo nel visualizzatore html in modo da poterlo esportare in Word quando si è soddisfatti del suo contenuto.

È anche possibile aggiungere note parola reale (vedi link sotto) http://davidgohel.github.io/ReporteRs/pot_objects.html#pot_footnotes

Se avete bisogno di più output tabulare, vi consigliamo anche il pacchetto di rtable che gestisce xtable oggetti (e altre cose che devo sviluppare per soddisfare i miei colleghi o clienti) - un demo veloce può essere visto qui:

http://davidgohel.github.io/tabular/

Speranza che aiuta ...

+0

Grazie! Ma sembra che ReporteRs sia un tentativo simile a quello di R2wd e alla soluzione markdown per gestire l'intero processo di scrittura in R, che non è quello per cui sono. La possibilità di stampare sul visualizzatore all'interno di Rstudio in htmlTable è più simile a quello che sto cercando che passare attraverso file di parole separati. Anche se htmlTable non è in grado di manipolare la tabella oltre le basi, potrei essere costretto a esaminare questo. – RandomMonitor

+0

Come scritto sopra 'FlexTable' SONO visualizzati in htmlViewer! –