【发布时间】:2019-04-04 17:07:38
【问题描述】:
我有一个要从中提取数据的 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 很陌生,所以我非常感谢任何帮助。
【问题讨论】:
-
几件事:你需要在你的正则表达式中用一个额外的斜线来逃避斜线......这很容易变得混乱。还有更合适的从 HTML 标签中提取数据的方法,例如使用
rvest,就是为此目的而设计的。另请参阅 this post 和rvest答案 -
另外,
rvest包含一个html_table函数,它包含从表中抓取数据所需的多个任务。我猜既然你有<tr>标签,这是来自网页中的一个更大的表格?从整个表格开始可能会更容易 -
为什么不使用 HTML 解析器来处理 HTML?
标签: r string split user-defined-functions