【发布时间】:2015-11-30 18:44:39
【问题描述】:
<TABLE cellspacing=1 cellpadding=7 rules=all frame=Box border=1>
<thead>
<TR>
<TD ROWSPAN=2 ALIGN=CENTER VALIGN=CENTER> </TD>
<TD COLSPAN=6 ALIGN=CENTER>1a. My peers make a positive impact my work environment.</TD>
<TD ALIGN=CENTER>Number</TD>
</TR>
<TR>
<TD ALIGN=CENTER>Strongly agree <br> </TD>
<TD ALIGN=CENTER>Generally agree <br> </TD>
<TD ALIGN=CENTER>Neither agree nor<br>disagree</TD>
<TD ALIGN=CENTER>Generally disagree<br> </TD>
<TD ALIGN=CENTER>Strongly disagree<br> </TD>
<TD ALIGN=CENTER>No basis to judge<br> </TD>
<TD ALIGN=CENTER>of Cases</TD>
</TR>
</thead>
<tbody>
<TR>
<TD ALIGN=LEFT VALIGN=TOP> Company-Wide </TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 44.1</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 44.9</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 6.6</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 2.6</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 1.6</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 0.1</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 2,014</TD>
</TR>
<TR>
<TD ALIGN=LEFT VALIGN=TOP> Region 1 </TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 45.6</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 45.2</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 5.7</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 2.1</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 1.4</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 0.1</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 1,699</TD>
</TR>
<TR>
<TD ALIGN=LEFT VALIGN=TOP>Division 1 </TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 52.9</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 39.7</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 4.1</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 2.5</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 0.8</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM>0</TD>
<TD ALIGN=RIGHT VALIGN=BOTTOM> 121</TD>
</TR>
</tbody>
</TABLE>
<hr><A NAME="IDX1"> </A>
我有一个 HTML 文件,其中包含多个上述类型的表格。我想将它们转换为一个数据框,其中当前位于表头中的每个调查问题都将出现在一个列中。对每个问题的回答百分比将保留在列中,回答水平也将保留。并非所有问题都有相同数量的回答(即,有些问题采用 5 分制,另一些采用 9 分制)。我尝试了 readHTMLTable ,然后对该结果执行了 do.call rbind ,但由于列数不相同,因此无法获得感兴趣的数据框。我欢迎任何关于如何进行的建议。谢谢!
编辑:
library(xml)
library(dplyr)
questions<-readHTMLTable(files[8], trim=T, as.data.frame=T, header=T)
data<-bind_rows(questions)
结果在我想要的数据框中,但由于某些问题的响应级别比其他问题高,“案例数”数据不会始终出现在一列中。有没有办法让我在合并之前命名每个表的最后一列?
【问题讨论】:
-
尝试将
data.table::rbindlist与fill=TRUE运算符一起使用或使用dplyr::bind_rows(也可以进行填充) -
谢谢,这很有帮助。有什么方法可以始终如一地指出哪个变量是最后一个变量,以便我可以确保它被命名?一旦它们全部合并,要始终如一地确定哪个变量是“案例数”,这有点挑战。
-
你需要展示一些代码来帮助回答更详细的问题(很难假设没有代码的流程结构是什么样的)
标签: html r xml-parsing dataframe