【问题标题】:convert XML data to data frame in R在R中将XML数据转换为数据框
【发布时间】:2021-11-30 20:58:23
【问题描述】:

我正在尝试将 XML 文件转换为数据框,但它只在列中显示很少的信息。

library(XML)

# LOADING TRANSFORMED XML INTO R DATA FRAME
doc <- xmlParse("SRR12545290.xml") # https://www.ncbi.nlm.nih.gov/sra/?term=SRR12545290
xmldf <- xmlToDataFrame(doc)
head(xmldf)

这只是显示

 │EXPERIMENT                                                                                                               
1│SRX903458416S amplicon of  Atlantic salmon: distal intestinal digestaSRP279301Illumina 16S metagenomic targeted sequenci…
 │SUBMISSION
1│SRA1118818
 │Organization                                                                                                             
1│Norwegian university of life scienceDepartment of Paraclinical SciencesNorwegian university of life scienceNO-0033OsloNo…
 │STUDY                                                                                                                    
1│SRP279301PRJNA660116ArcticFloraDiet with or without functional feed ingredients were fed to Atlantic salmon through fres…
 │SAMPLE                                                                                                                   
1│SRS7285186SAMN15936598FW-Ref749906gut metagenome['Distal intestinal digesta of Atlantic salmon', 'Distal intestinal dige…
 │Pool                  │RUN_SET                          
1│SRS7285186SAMN15936598│SRR12545290SRS7285186SAMN15936598

但是,我想获取 XML 文件中存在的所有信息。比如地理位置、主机名等。

【问题讨论】:

  • 所有数据都在那里,只是所有的子节点都连接到了七个父节点中。因为这个文件没有规则的重复结构,你到底在寻找什么 1 行 200 列?
  • @Dave2e 是的,我需要 1 行 200 列

标签: r xml ncbi


【解决方案1】:

这是一种解析整个 XML(使用 xml2 包)以获取所有叶节点的值以及路径名的方法。
不确定这是否是您要寻找的东西,只是一个开始。

library(xml2)
library(dplyr)    
doc<-read_xml("SRR12545290.xml")


#find all the nodes
allnodes <- doc %>% xml_find_all( '//*')

#find the leafs
leafs <- which( (allnodes %>% xml_children() %>% xml_length())==0)

#get the value in the leafs
value <- (allnodes %>% xml_text())[leafs]

#get the path to leaves to indentify the source
name <- (allnodes %>% xml_path())[leafs]
   
#clean up naming
name <- gsub("/EXPERIMENT_PACKAGE_SET/EXPERIMENT_PACKAGE/", "", name)

#final result
data.frame(name, value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2021-03-25
    相关资源
    最近更新 更多