0

我有一个来自一些期刊补充数据的离线 html 文件。它的格式是一对一的行/条目,一些列被拆分,例如:

OrganismID  GeneID

Org1        Gene1
____________
Org2        Gene1
            Gene2
___
Org3        Gene2
            Gene3
            Gene4  

所以对于 OrganismID 列有 3 行,但 GeneID 列有一行对应于 OrganismID 的第一行,两行对应于 OrganismID 的第二行,三行对应于 OrganismID 的第三行。所以它看起来就像你在文档中拆分表格中的单元格。我怎样才能把它放到R中,或者把它变成更好的格式,比如传统的R data.frame?

编辑:

我已经包含了前几个条目的 HTML 代码,它们很好地显示了表格的列如何具有不同的行。我的 HTML 不是最新的,但他们似乎通过在第 1 列的每一行的开头定义它来为第 4 5 和第 6 列中的多行“腾出空间”,并声明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>
4

1 回答 1

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
于 2013-04-05T21:08:49.273 回答