如何读取包含不匹配的列和标题的HTML表格?

时间:2017-02-28 12:07:42

标签: html r html-table package

HTML表主体比表头中定义的列多1列。这导致跳过最后一列,当然还有列不匹配。如何在使用package("htmltab")的HTML表格中读取R中的结果data.frame / table时添加其他列显然,后期处理没有帮助。

Here is an example:

install.packages("htmltab")
library(htmltab)
bu<- 0
bu <- data.table("Pl.", "Mannschaft", "Kurzname" ,  "Spiele", "G.", "U.", "V.", "Tore", "Diff.", "Pkt.")
#https://www.bundesliga-prognose.de/1/2009/1/
url <- "https://www.bundesliga-prognose.de/1/2009/1/"
bu <- htmltab(doc = url,  column=10,columnnames=c ("Pl." ,  "Mannschaft", "Kurzname" , "Spiele", "G.", "U.", "V.", "Tore", "Diff.", "Pkt."), which = "//th[text() = 'Pl.']/ancestor::table")
bu <- data.table(bu)
head(bu)

导致

 Pl.            Mannschaft        Spiele G. U. V. Tore Diff. Pkt.
 1:  1.         VfL Wolfsburg     Wolfsburg  1  1  0    0   2:0    2
 2:  2.   Eintracht Frankfurt  E. Frankfurt  1  1  0    0   3:2    1
 3:  3.         FC Schalke 04 FC Schalke 04  1  1  0    0   2:1    1
 4:  4.     Borussia Dortmund   B. Dortmund  1  1  0    0   1:0    1
 5:  NA     Hertha BSC Berlin H. BSC Berlin  1  1  0    0   1:0    1
 6:  6. Bor. Mönchengladbach   M´gladbach  1  0  1    0   3:3    0

由于标题中未指定短名称(“ Kurzname ”),因此会在游戏中显示短名称(“ Kurzname ”)({{ 1}})列等等。所以跳过最后一列。如何使用Spiele包读取标题时添加其他列短名称(“ Kurzname ”)? 另外,我想使用htmltab包替换第5行中的NA和行ID /号码?

2 个答案:

答案 0 :(得分:0)

这似乎确实是htmltab的一个问题。我找到的唯一解决方案是直接读取表的tbody。然后,您需要手动添加标题。

htmltab(doc = url, which = "//table[2]/tbody")

答案 1 :(得分:0)

在这种帮助下,我找到了一个非常简单的解决方案:

  1. 指定跳过标题
  2. 通过colNames列出/定义所有colums

    url&lt; - &#34; https://www.bundesliga-prognose.de/1/2007/5/&#34;     sp_2007_5&lt; - htmltab(doc = url,其中=&#34; // table [1] / tbody&#34;,header = 0,colNames = c(&#34; Datum&#34;,&#34; Anpfiff&# 34;,&#34; Heim&#34;,&#34; Heim_Kurzname&#34;,&#34; Gast&#34;,&#34; Gast_Kurzname&#34;,&#34; Ergebnis&#34;,&# 34;预测&#34;),rm_nodata_cols = F,编码=&#34; UTF-8&#34;)                         head(sp_2007_5)