2017-01-12 5 views
2

Ich habe einige Probleme mit der Änderung der thead Hintergrundfarbe mit dem htmlTable-Paket in R. Durch herumspielen mit den css.cell Optionen konnte ich die Farbe eines Teils der Tabelle ändern Header, aber nicht alle (Code-Snippet ausführen).Ändern der Tabelle Header-Farbe mit htmlTable

require(htmlTable) 
mat <- matrix(1:20, ncol=5) 

htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
     header = LETTERS[1:5], 
     css.cell = rbind(rep("background: lightgrey;", 
          times=ncol(mat)), 
         matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 

# Not Run 
# x = htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
#    header = LETTERS[1:5], 
#    css.cell = rbind(rep("background: lightgrey;", 
#        times=ncol(mat)), 
#        matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 
# get the output 
# as.character(x) 

Die Ausgabe aus dem Code erzeugt die folgenden

<table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;'>\n 
 
    <thead>\n 
 
    <tr>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='3' style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Rank</th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>\n</tr>\n 
 
    <tr>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>A</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>B</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>C</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>D</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='background: lightgrey; border-bottom: 1px solid grey; text-align: center;'>E</th>\n</tr>\n</thead>\n 
 
    <tbody>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>1</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>5</td>\n 
 
     <td style='text-align: center;'>9</td>\n 
 
     <td style='text-align: center;'>13</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>17</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>2</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>6</td>\n 
 
     <td style='text-align: center;'>10</td>\n 
 
     <td style='text-align: center;'>14</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>18</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>3</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>7</td>\n 
 
     <td style='text-align: center;'>11</td>\n 
 
     <td style='text-align: center;'>15</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>19</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>4</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>8</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>12</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>16</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>20</td>\n</tr>\n</tbody>\n</table>

Offensichtlich die "\ n" Ausgang ärgerlich ist, aber leicht handhabbar sein. Aber hat jemand irgendwelche Ideen, wie man die Hintergrundfarbe im Tabellenkopf direkt von R aus steuert?

Ich weiß, dass ich den thead-Stil manuell anpassen kann, indem ich folgendes zur html-Ausgabe hinzufüge: style = "background-color: lightgrey;", aber es wäre sehr schön, wenn ich die gewünschte Ausgabe direkt von R bekommen könnte .

Hier ist meine gewünschte Tabelle ausgegeben, wenn ich die Hintergrundfarbe in thead manuell ändern:

<table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;'>\n 
 
    <thead style="background-color: lightgrey;">\n 
 
    <tr>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='3' style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Rank</th> 
 
     <th style='border-top: 2px solid grey;; border-bottom: hidden;'>&nbsp;</th>\n 
 
     <th colspan='1' style='font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>\n</tr>\n 
 
    <tr>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>A</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>B</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>C</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>D</th>\n 
 
     <th style='border-bottom: 1px solid grey;' colspan='1'>&nbsp;</th>\n 
 
     <th style='border-bottom: 1px solid grey; text-align: center;'>E</th>\n</tr>\n</thead>\n 
 
    <tbody>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>1</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>5</td>\n 
 
     <td style='text-align: center;'>9</td>\n 
 
     <td style='text-align: center;'>13</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>17</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>2</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>6</td>\n 
 
     <td style='text-align: center;'>10</td>\n 
 
     <td style='text-align: center;'>14</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>18</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='text-align: center;'>3</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>7</td>\n 
 
     <td style='text-align: center;'>11</td>\n 
 
     <td style='text-align: center;'>15</td>\n 
 
     <td style='' colspan='1'>&nbsp;</td>\n 
 
     <td style='text-align: center;'>19</td>\n</tr>\n 
 
    <tr>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>4</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>8</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>12</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>16</td>\n 
 
     <td style='border-bottom: 2px solid grey;' colspan='1'>&nbsp;</td>\n 
 
     <td style='border-bottom: 2px solid grey; text-align: center;'>20</td>\n</tr>\n</tbody>\n</table>

zusätzlichen Bonus, wenn jemand weiß, wie man loswerden der „\ n " Ausgabe, die auch sehr hilfreich wäre

Antwort

2

Sie möchten vielleicht prüfen tableHTML für diesen einen, weil es die volle Kontrolle über CSS erstellt. tableHTML verwendet den Pipe-Operator zum Verketten von Befehlen.

Arbeiten mit Daten:

library(tableHTML) 
mat %>% 
as.data.frame() %>% 
#tableHTML is the main function that creates the html table 
tableHTML(border = 0, rownames = FALSE, 
      second_header = list(c(1, 3, 1), c('', 'Rank', ''))) %>% 
#the add_css family of functions add CSS to the corresponding 
#parts of the table 
add_css_thead(list(c('background-color'), c('lightgrey'))) %>% 
add_css_table(list(c('text-align'), c('center'))) %>% 
add_css_row(css = list('border-top', '2px solid black'), rows = 1) %>% 
add_css_row(css = list('border-bottom', '1px solid black'), rows = 2) %>% 
add_css_row(css = list('border-bottom', '2px solid black'), rows = 6) %>% 
add_css_second_header(css = list('border-bottom', '1px solid black'), second_headers = 2) 

die in der Tabelle führen würden Sie wollen, aber ohne einen Hack zu verwenden, zu benötigen tablehtml oder anderes Paket (oder müssen manuell mit dem /n s umgehen) zu ändern:

enter image description here

Sie können es noch weiter modifizieren, wenn Sie es wünschen. Es gibt auch ein Online-Tutorial here, wenn Sie interessiert sind.

+0

Sehr cool auch. – anotherFishGuy

+0

Das Tutorial war sehr hilfreich – anotherFishGuy

+0

Vielen Dank. Jede Rückmeldung ist mehr als willkommen :) – LyzandeR

1

Ich bin nicht sehr vertraut mit htmlTable in R, aber hier ist eine Overkill-Lösung mit dem XML Paket, um die Ausgabe von htmlTable zu manipulieren.

require(htmlTable) 
mat <- matrix(1:20, ncol=5) 

tab <- htmlTable(mat,cgroup = c("","Rank",""),n.cgroup = c(1,3,1), 
     header = LETTERS[1:5], 
     css.cell = rbind(rep("background: lightgrey;", 
          times=ncol(mat)), 
         matrix("", ncol=ncol(mat), nrow=nrow(mat)))) 


library(XML) 

# Parse the HTML table and add the background color attribute 
doc <- htmlParse(tab) 
addAttributes(doc[['//thead']], 'style' = "background-color: lightgrey;") 

# Convert HTML DOM object to string 
html_str <- toString.XMLNode(doc) 

# Remove line escapes, as requested 
html_str <- gsub('\\\n', '', html_str) 

# Remove the DOCTYPE included by htmlParse() 
html_str <- gsub('<!DOCTYPE[^>]*>', '', html_str) 

cat(html_str) 

Es gibt eine HTML-Zeichenfolge, die die gewünschte Tabelle erstellt:

<html><body><table class="gmisc_table" style="border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;"><thead style="background-color: lightgrey;"><tr><th colspan="1" style="font-weight: 900; border-top: 2px solid grey; text-align: center;"></th><th style="border-top: 2px solid grey;; border-bottom: hidden;"> </th><th colspan="3" style="font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;">Rank</th><th style="border-top: 2px solid grey;; border-bottom: hidden;"> </th><th colspan="1" style="font-weight: 900; border-top: 2px solid grey; text-align: center;"></th></tr><tr><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">A</th><th style="border-bottom: 1px solid grey;" colspan="1"> </th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">B</th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">C</th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">D</th><th style="border-bottom: 1px solid grey;" colspan="1"> </th><th style="background: lightgrey; border-bottom: 1px solid grey; text-align: center;">E</th></tr></thead><tbody><tr><td style="text-align: center;">1</td><td style="" colspan="1"> </td><td style="text-align: center;">5</td><td style="text-align: center;">9</td><td style="text-align: center;">13</td><td style="" colspan="1"> </td><td style="text-align: center;">17</td></tr><tr><td style="text-align: center;">2</td><td style="" colspan="1"> </td><td style="text-align: center;">6</td><td style="text-align: center;">10</td><td style="text-align: center;">14</td><td style="" colspan="1"> </td><td style="text-align: center;">18</td></tr><tr><td style="text-align: center;">3</td><td style="" colspan="1"> </td><td style="text-align: center;">7</td><td style="text-align: center;">11</td><td style="text-align: center;">15</td><td style="" colspan="1"> </td><td style="text-align: center;">19</td></tr><tr><td style="border-bottom: 2px solid grey; text-align: center;">4</td><td style="border-bottom: 2px solid grey;" colspan="1"> </td><td style="border-bottom: 2px solid grey; text-align: center;">8</td><td style="border-bottom: 2px solid grey; text-align: center;">12</td><td style="border-bottom: 2px solid grey; text-align: center;">16</td><td style="border-bottom: 2px solid grey;" colspan="1"> </td><td style="border-bottom: 2px solid grey; text-align: center;">20</td></tr></tbody></table></body></html>

+0

Ausgezeichnet vielen Dank! – anotherFishGuy

Verwandte Themen