首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R从XML文件中提取数据的问题

使用R从XML文件中提取数据的问题
EN

Stack Overflow用户
提问于 2014-05-24 05:46:02
回答 1查看 271关注 0票数 0

我在一个xml文件中有一个大型的蛋白质数据库,我需要从R中提取一些信息。该数据库按条目组织,其中包含我需要提取和格式化的特定蛋白质的信息。

https://www.dropbox.com/s/dq8ir9f22cnfwrz/Sample.xml

我想提取名称,类型为"EC“的所有dbReferences,以及每个条目的序列。到目前为止,我有:

代码语言:javascript
复制
library("XML")
doc <- xmlParse("Sample.xml")

我在考虑要么使用xpathSApply函数显式地选择要转到的标记,要么使用xmlToDataFrame函数。我是R的新手,所以我有点困惑,不知道从哪里开始。

EN

回答 1

Stack Overflow用户

发布于 2014-05-28 03:49:54

只需从getNodeSet中选择所需的元素

代码语言:javascript
复制
nd <- getNodeSet(doc, "//ns:entry", namespaces=c(ns=getDefaultNamespace(doc)[[1]]$uri))
y <- data.frame( id = sapply(nd, xpathSApply, './*[local-name()="name"]', xmlValue),
        ec = sapply(nd,  function(y) paste( xpathSApply(y, './/*[local-name()="dbReference" and @type="EC"]/@id'), collapse="; ")),
 sequence =  gsub("\n", "", sapply(nd, xpathSApply, './*[local-name()="sequence"]', xmlValue)))

head(y, 3)
           id                                                                      ec                                         sequence  
1 AK1C3_HUMAN 1.-.-.-; 1.1.1.357; 1.1.1.112; 1.1.1.188; 1.1.1.239; 1.1.1.64; 1.3.1.20  MDSKHQCVKLNDGHFMPVLGFGTYAPPEVPRSKALEVTKLAIEA...
2 CP3A4_HUMAN              1.14.13.-; 1.14.13.157; 1.14.13.32; 1.14.13.67; 1.14.13.97  MALIPDLAMETWLLLAVSLVLLYLYGTHSHGLFKKLGIPGPTPL...
3 AK1C1_HUMAN                                 1.1.1.-; 1.1.1.149; 1.1.1.112; 1.3.1.20  MDSKYQCVKLNDGHFMPVLGFGTYAPAEVPKSKALEATKLAIEA...

您还可以删除名称空间并简化这些查询...

代码语言:javascript
复制
x <- readLines("Sample.xml")
x[2] <- "<uniprot>"
doc <- xmlParse(x)
nd <- getNodeSet(doc, "//entry")

或者使用Uniprot中的Rest服务

http://www.uniprot.org/uniprot/?query=AK1C3_HUMAN+OR+CP3A4_HUMAN+OR+AK1C1_HUMAN&format=tab&columns=entry%20name,ec,sequence

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23838760

复制
相关文章

相似问题

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