使用htmlTable

时间:2017-01-12 19:18:39

标签: html r

我在使用R中的htmlTable包更改thead背景颜色时遇到了一些问题。通过使用css.cell选项,我能够更改表头部分的颜色但不是全部(运行)代码段。)

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)

代码的输出产生以下内容

<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>

显然“\ n”输出很烦人,但很容易管理。但有没有人对如何直接从R?

控制表头中的背景颜色有任何想法

我知道我可以通过在html输出中添加以下内容来手动调整thead样式:style =“background-color:lightgrey;”但是如果我可以直接从R获得所需的输出那将是非常好的。

当我手动更改thead中的背景颜色时,这是我想要的表格输出:

<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>

添加奖金,如果有人知道如何摆脱“\ n”输出也会非常有帮助

2 个答案:

答案 0 :(得分:2)

您可能需要考虑tableHTML这个,因为它增加了对CSS的完全控制。 tableHTML使用管道运算符来链接命令。

使用您的数据:

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)

这将导致您想要的表,但无需使用hack来修改tablehtml或任何其他包(或需要手动处理/n):

enter image description here

如果您愿意,您仍然可以进一步修改它。如果您有兴趣,还有一个在线教程here

答案 1 :(得分:1)

我对R中的htmlTable不是很熟悉,但这是一个使用XML包来操纵htmlTable输出的过度杀伤解决方案。

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)

它输出一个HTML字符串,用于创建所需的表:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;