阅读网站表格在R中带有一个列表名称“ NULL”

时间:2018-11-24 02:35:51

标签: html r web

我想直接从带有R的网页中读取表格。在读者看来,带有表格的网页如下所示:

enter image description here

我使用了两个软件包从网页中读取表格。除了将表作为列表读取外,它工作正常。

library(RCurl)
library(XML)
d<-getURL('https://securewordpresswebsiteAddress/data/')
d<-readHTMLTable(d, header=T)

这是我看完桌子后得到的东西

> d
$`NULL`
    ID      X       Y Depth    P
1 1046 256857 2632323    13  2.8
2 1054 257090 2632039    13  1.1
3 1057 257099 2631981    13  2.6
4 1058 257071 2632004     9  2.1
5 1060 257173 2632004    13    4
6 1089 257194 2631660    13 14.1

这个$ NULL来自哪里?有办法避免吗?

1 个答案:

答案 0 :(得分:0)

您的代码实际上是根据HTML表的组成返回命名元素的列表。

> readHTMLTable('~/htmltest.html', header=TRUE, as.data.frame=FALSE)
$`NULL`
$`NULL`$`ID`
[1] "1046" "1054" "1057" "1058" "1060" "1089"

$`NULL`$X
[1] "256857" "257090" "257099" "257071" "257194" "257194"

$`NULL`$Y
[1] "2632323" "2632039" "2631981" "2632004" "2632004" "2631660"

$`NULL`$Depth
[1] "13" "13" "13" "9"  "13" "13"

$`NULL`$P
[1] "2.8"  "1.1"  "2.6"  "2.1"  "4"    "14.1"

因此,当您使用as.data.frame = TRUE时,它会将元素列表强制转换为另一个包含data.frame的列表。由于HTML表没有与之关联的id,因此命名为NULL

通过在编写HTML表时在表标记内添加id来解决此问题,就像<table id='sometable'> .. </table>

> readHTMLTable('~/htmltest.html', header=TRUE, as.data.frame=TRUE)

$`sometable`
    ID      X       Y Depth    P
1 1046 256857 2632323    13  2.8
2 1054 257090 2632039    13  1.1
3 1057 257099 2631981    13  2.6
4 1058 257071 2632004     9  2.1
5 1060 257194 2632004    13    4
6 1089 257194 2631660    13 14.1

我正在读取的HTML文件包含下表:

<table id='sometable'>
    <thead>
        <tr><th>ID</th><th>X</th><th>Y</th><th>Depth</th><th>P</th></tr>
    </thead>
    <tbody>
        <tr><td>1046</td><td>256857</td><td>2632323</td><td>13</td><td>2.8</td></tr>
        <tr><td>1054</td><td>257090</td><td>2632039</td><td>13</td><td>1.1</td></tr>
        <tr><td>1057</td><td>257099</td><td>2631981</td><td>13</td><td>2.6</td></tr>
        <tr><td>1058</td><td>257071</td><td>2632004</td><td>9</td><td>2.1</td></tr>
        <tr><td>1060</td><td>257194</td><td>2632004</td><td>13</td><td>4</td></tr>
        <tr><td>1089</td><td>257194</td><td>2631660</td><td>13</td><td>14.1</td></tr>
    </tbody>
</table>