我想直接从带有R的网页中读取表格。在读者看来,带有表格的网页如下所示:
我使用了两个软件包从网页中读取表格。除了将表作为列表读取外,它工作正常。
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
来自哪里?有办法避免吗?
答案 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>