2013-07-19 6 views
9

Supponiamo di avere un frame dati in R. Mi piacerebbe scriverlo in un file come una semplice tabella HTML. Solo i tag tabella <>, < tr> e < td>.Come posso trasformare un frame di dati R in una tabella html semplice e non controllata?

Finora questo sembra più difficile di quanto dovrebbe essere. In questo momento sto cercando di utilizzare R2THML in questo modo:

HTML(dataframe, file=outpath, append=FALSE) 

Ma poi ho ottenere un brutto, file html stile che potrebbe apparire in questo modo:

<table cellspacing=0 border=1> 
<caption align=bottom class=captiondataframe></caption> 
<tr><td> 
    <table border=0 class=dataframe> 
    <tbody> 
    <tr class= firstline > 
     <th>&nbsp; </th> 
     <th>name </th> 
     <th>donations </th> 
     <th>clicks </th> 
      ... 
    </tr> 
<tr> 
<td class=firstcolumn>1 
</td> 
<td class=cellinside>Black.text 
</td> 
... 
</tbody> 
</table> 
</td></table> 
<br> 

C'è un modo per ottenere l'output è più semplice (senza specificare il bordo, le intestazioni, le didascalie, ecc. senza emettere un tavolo all'interno di un'altra tabella)? O è così buono come si arriva?

+2

non ho mai usato per ' HTML', ma so che 'xtable' è un buon pacchetto (lo uso per' latex') che ha un'opzione 'HTML'. –

risposta

15

Il pacchetto xtable può generare output HTML così come LaTeX.

# install.packages("xtable") 
library("xtable") 
sample_table <- mtcars[1:3,1:3] 
print(xtable(sample_table), type="html", file="example.html") 

dà, nel file example.html:

<!-- html table generated in R 3.0.1 by xtable 1.7-1 package --> 
<!-- Fri Jul 19 09:08:15 2013 --> 
<TABLE border=1> 
<TR> <TH> </TH> <TH> mpg </TH> <TH> cyl </TH> <TH> disp </TH> </TR> 
    <TR> <TD align="right"> Mazda RX4 </TD> <TD align="right"> 21.00 </TD> <TD align="right"> 6.00 </TD> <TD align="right"> 160.00 </TD> </TR> 
    <TR> <TD align="right"> Mazda RX4 Wag </TD> <TD align="right"> 21.00 </TD> <TD align="right"> 6.00 </TD> <TD align="right"> 160.00 </TD> </TR> 
    <TR> <TD align="right"> Datsun 710 </TD> <TD align="right"> 22.80 </TD> <TD align="right"> 4.00 </TD> <TD align="right"> 108.00 </TD> </TR> 
    </TABLE> 

Questo potrebbe essere ulteriormente semplificata con più opzioni per xtable e print.xtable:

print(xtable(sample_table, align="llll"), 
     type="html", html.table.attributes="") 

<!-- html table generated in R 3.0.1 by xtable 1.7-1 package --> 
<!-- Fri Jul 19 09:13:33 2013 --> 
<TABLE > 
<TR> <TH> </TH> <TH> mpg </TH> <TH> cyl </TH> <TH> disp </TH> </TR> 
    <TR> <TD> Mazda RX4 </TD> <TD> 21.00 </TD> <TD> 6.00 </TD> <TD> 160.00 </TD> </TR> 
    <TR> <TD> Mazda RX4 Wag </TD> <TD> 21.00 </TD> <TD> 6.00 </TD> <TD> 160.00 </TD> </TR> 
    <TR> <TD> Datsun 710 </TD> <TD> 22.80 </TD> <TD> 4.00 </TD> <TD> 108.00 </TD> </TR> 
    </TABLE> 

(che potrebbe essere diretto ad un file con il file argomento per print.xtable come nell'esempio precedente.)

+0

Guardo '? Xtable' e non c'è alcun parametro' type' per me. Quando lo specifico viene ignorato, ottengo sempre LaTeX. Funziona solo quando I 'x <- xtable (...)' e poi uso 'print.xtable (x, type =" html ")'. –

+0

@Someone L'argomento 'type' * è * un argomento alla chiamata' print', non alla chiamata 'xtable'. Ho semplicemente annidato la chiamata 'xtable' all'interno della chiamata' print' per comodità. –

4

La risposta è in realtà abbastanza semplice, se si utilizza xtable. (Grazie a Señor O per la punta.)

install.packages("xtable") 
library(xtable) 
out_table_x <- xtable(out_table) 
print(out_table_x, type='html', file="./example.html") 
2

Un'opzione più bella ma più lento:

library(htmlTable) 
htmlTable(iris) 
0
to_html_table<-function(dataframe){ 
tags$table(
    tags$thead(tags$tr(lapply(colnames(dataframe), function(x) tags$th(x)))), 
    tags$tbody(
    apply(dataframe,1, function(x) { tags$tr(lapply(x, function(y) tags$td(y)))}) 
)) 
} 
+1

Modifica la tua risposta e aggiungi una spiegazione. Le risposte al solo codice sono scoraggiate e possono essere cancellate perché non spiegano nulla. – WebDevBooster

+0

[Come parte del sistema di revisione] (https://stackoverflow.com/review/low-quality-posts/18708495), ho modificato la risposta per correggere la formattazione. Dovresti ascoltare WebDevBooster e spiegare il tuo codice. –