我有一个离线的html文件从一些日志补充数据。它是一种格式,对于一个一行/条目,一些列被分割,例如:
OrganismID GeneID
Org1 Gene1
____________
Org2 Gene1
Gene2
___
Org3 Gene2
Gene3
Gene4 因此,对于OrganismID,列有3行,但GeneID列有一行对应于OrganismID的第一行,2行对应于OrganismID的第二行,3行对应于第三行OrganismID。因此,当您在文档中的表中拆分单元格时,看起来是这样的。我如何才能将其转换为R,并可能将其转换为更好的格式,比如传统的R data.frame?
编辑:
我为前几个条目提供了HTML代码,这些条目很好地显示了表的列如何具有不同的行。我并没有使用我的HTML,但是它们似乎为第4、第5和第6列中的多行“腾出空间”,方法是在第1列的每一行开头通过声明rowspan来定义它。
<!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>发布于 2013-04-05 21:08:49
我很少修改您的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 - TACTTGGAATTTGTAThttps://stackoverflow.com/questions/15842079
复制相似问题