首页 > 解决方案 > 从R中的HTML标签中提取数据

问题描述

我有一个要从中提取数据的 html 表。我在这里有第 21 行,我需要从中获得 11 个字符向量(然后对所有数据行执行相同操作。我正在尝试编写一个函数来执行此操作,其中:

dt是我的数据表,这就是第 21 行的样子:

[1] "<tr><td>1</td><td>11 Com</td><td>b</td><td>Radial Velocity</td> 
<td>1</td><td>326.03</td><td>1.29</td><td></td><td>19.4</td><td></td> 
<td>2.7</td></tr>"

我需要摆脱所有的“ <tr><td>”等,并在它们背靠背存在的地方插入 0 或 NA ( "</td><td></td><td>")。

这是我到目前为止所拥有的。首先,我不断收到错误:

strsplit(a, "</td><td>") 中的错误:非字符参数

f<-function(row.data){
 a<-strsplit(row.data,"<tr><td>")
        b<-unlist(strsplit(a,"</td><td>")))
}
f(dt[21])

这还没有解决插入 0 或 NA 的问题。我对 R 很陌生,所以我非常感谢任何帮助。

标签: rstringsplituser-defined-functions

解决方案


这可以通过gsub. 正如评论的那样,您确实应该逃避/with\\

dat <-  "<tr><td>1</td><td>11 Com</td><td>b</td><td>Radial Velocity</td><td>1</td><td>326.03</td><td>1.29</td><td></td><td>19.4</td><td></td><td>2.7</td></tr>"
a<-gsub("<tr>",0,dat)
a<-gsub("<td>",0,a) 
a<-gsub("<\\/td>",0,a) 
a<-gsub("<\\/tr>",0,a) 
a
[1] "0010011 Com00b00Radial Velocity0 \n0100326.03001.29000019.4000 \n02.700"

推荐阅读