我有一些日志补充数据的离线html文件。它的格式是一对一行/条目,一些列被拆分,例如:
OrganismID GeneID
Org1 Gene1
____________
Org2 Gene1
Gene2
___
Org3 Gene2
Gene3
Gene4
因此,对于OrganismID,该列有3行,但GeneID列有一行对应于OrganismID的第一行,2行对应于第二行的OrganismID,三行对应于第三行的OrganismID。因此,当您在文档中的表中拆分单元格时,它看起来就像。我如何才能将其转换为 R ,并且可能会将其转换为更好的格式,例如传统的 R data.frame?
编辑:
我已经包含了前几个条目的HTML代码,这些条目可以很好地显示表的列如何具有不同的行。我不是最新的HTML,但他们似乎通过声明rowspan
在第1列的每一行的开头定义它,为第4和第5列中的多行“腾出空间”:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Overview per Gene</title>
</head>
<body>
<table border="1">
<tr>
<th>Species</th>
<th>Gene ID</th>
<th>Length Upstream</th>
<th>Motif ID</th>
<th>Position</th>
<th>Strand</th>
<th>Match</th>
</tr>
<tr>
<td rowspan="2">P. infestans</td>
<td rowspan="2">PITG_00002</td>
<td rowspan="2">1000</td>
<td>Motif-0</td>
<td>-574</td>
<td>-</td>
<td>TCAGTCTTACATCTAC</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-430</td>
<td>-</td>
<td>GTTACATGAAG</td>
</tr>
<tr>
<td rowspan="1">P. infestans</td>
<td rowspan="1">PITG_00004</td>
<td rowspan="1">454</td>
<td>Motif-1</td>
<td>-264</td>
<td>+</td>
<td>TACATGTAA</td>
</tr>
<tr>
<td rowspan="2">P. infestans</td>
<td rowspan="2">PITG_00006</td>
<td rowspan="2">1000</td>
<td>Motif-0</td>
<td>-55</td>
<td>+</td>
<td>CATTCCTAATTTCGCC</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-326</td>
<td>+</td>
<td>CATATATGTATGG</td>
</tr>
<tr>
<td rowspan="3">P. infestans</td>
<td rowspan="3">PITG_00009</td>
<td rowspan="3">1000</td>
<td>Motif-0</td>
<td>-413</td>
<td>-</td>
<td>TCACTTCTCTACTTTG</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-31</td>
<td>+</td>
<td>TACATGTAC</td>
</tr>
<tr>
<td>Motif-3</td>
<td>-271</td>
<td>-</td>
<td>TACTTGGAATTTGTAT</td>
</tr>
<tr>
答案 0 :(得分:4)
我对您的HTML代码做了一些更正,例如我已关闭<table>
,<body>
和<html>
,我使用XML
包来阅读此表。我注意到在某些情况下列的顺序不正确,但您可以在阅读此表后修复。
我的主张如下。
library(XML)
a<-'<html>
<head>
<title>Overview per Gene</title>
</head>
<body>
<table border="1">
<tr>
<th>Species</th>
<th>Gene ID</th>
<th>Length Upstream</th>
<th>Motif ID</th>
<th>Position</th>
<th>Strand</th>
<th>Match</th>
</tr>
<tr>
<td rowspan="2">P. infestans</td>
<td rowspan="2">PITG_00002</td>
<td rowspan="2">1000</td>
<td>Motif-0</td>
<td>-574</td>
<td>-</td>
<td>TCAGTCTTACATCTAC</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-430</td>
<td>-</td>
<td>GTTACATGAAG</td>
</tr>
<tr>
<td rowspan="1">P. infestans</td>
<td rowspan="1">PITG_00004</td>
<td rowspan="1">454</td>
<td>Motif-1</td>
<td>-264</td>
<td>+</td>
<td>TACATGTAA</td>
</tr>
<tr>
<td rowspan="2">P. infestans</td>
<td rowspan="2">PITG_00006</td>
<td rowspan="2">1000</td>
<td>Motif-0</td>
<td>-55</td>
<td>+</td>
<td>CATTCCTAATTTCGCC</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-326</td>
<td>+</td>
<td>CATATATGTATGG</td>
</tr>
<tr>
<td rowspan="3">P. infestans</td>
<td rowspan="3">PITG_00009</td>
<td rowspan="3">1000</td>
<td>Motif-0</td>
<td>-413</td>
<td>-</td>
<td>TCACTTCTCTACTTTG</td>
</tr>
<tr>
<td>Motif-1</td>
<td>-31</td>
<td>+</td>
<td>TACATGTAC</td>
</tr>
<tr>
<td>Motif-3</td>
<td>-271</td>
<td>-</td>
<td>TACTTGGAATTTGTAT</td>
</tr>
</table>
</body>
</html>'
doc<-htmlParse(a)
tab<-readHTMLTable(doc,which=1)
idx<-which(is.na(tab$Match))
lapply(tab,class)
for (i in 1:ncol(tab)){
tab[,i]<-as.character(tab[,i])
}
tab[idx,c(4:7)]<-tab[idx,c(1:4)]
tab[idx,c(1:3)]<-NA
和结果
tab
Species Gene ID Length Upstream Motif ID Position Strand Match
1 P. infestans PITG_00002 1000 Motif-0 -574 - TCAGTCTTACATCTAC
2 <NA> <NA> <NA> Motif-1 -430 - GTTACATGAAG
3 P. infestans PITG_00004 454 Motif-1 -264 + TACATGTAA
4 P. infestans PITG_00006 1000 Motif-0 -55 + CATTCCTAATTTCGCC
5 <NA> <NA> <NA> Motif-1 -326 + CATATATGTATGG
6 P. infestans PITG_00009 1000 Motif-0 -413 - TCACTTCTCTACTTTG
7 <NA> <NA> <NA> Motif-1 -31 + TACATGTAC
8 <NA> <NA> <NA> Motif-3 -271 - TACTTGGAATTTGTAT