首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个形状奇特的HTML表中读取R

在一个形状奇特的HTML表中读取R
EN

Stack Overflow用户
提问于 2013-04-05 19:34:42
回答 1查看 144关注 0票数 0

我有一个离线的html文件从一些日志补充数据。它是一种格式,对于一个一行/条目,一些列被分割,例如:

代码语言:javascript
复制
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来定义它。

代码语言:javascript
复制
<!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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 21:08:49

我很少修改您的html代码,例如,我关闭了<table><body><html>,并使用XML包读取了这个表。我注意到,在某些情况下,列不是按正确的顺序排列的,但是您可以在读取此表之后修复。

我的建议如下。

代码语言:javascript
复制
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

和结果

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15842079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档