首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R从Graphpad Prism导入XML

R从Graphpad Prism导入XML
EN

Stack Overflow用户
提问于 2014-08-26 20:41:43
回答 1查看 1.4K关注 0票数 4

我正在尝试从原则上为.xml文件的Graphpad Prism .pzfx文件导入原始数据。我拿出了大部分棱镜特定的东西,只留下了我感兴趣的那部分。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<GraphPadPrismFile xmlns="http://graphpad.com/prism/Prism.htm" PrismXMLVersion="5.00">
  <TableSequence Selected="1">
    <Ref ID="Table0" Selected="1"/>
  </TableSequence>
  <Table ID="Table0" XFormat="error" YFormat="replicates" Replicates="1" TableType="XY" EVFormat="AsteriskAfterNumber">
    <Title>Data 1</Title>
    <XColumn Width="162" Decimals="0" Subcolumns="1">
      <Title>X</Title>
      <Subcolumn>
        <d>1</d>
        <d>2</d>
        <d>3</d>
        <d>4</d>
        <d>5</d>
      </Subcolumn>
    </XColumn>
    <YColumn Width="81" Decimals="4" Subcolumns="1">
      <Title>ML</Title>
      <Subcolumn>
        <d>120</d>
        <d>100</d>
        <d>5</d>
        <d>0</d>
        <d>1.5</d>
      </Subcolumn>
    </YColumn>
    <YColumn Width="81" Decimals="4" Subcolumns="1">
      <Title>MH</Title>
      <Subcolumn>
        <d>10</d>
        <d>560</d>
        <d>665</d>
        <d>40</d>
        <d>31.5</d>
      </Subcolumn>
    </YColumn>
    <YColumn Width="81" Decimals="6" Subcolumns="1">
      <Title>MH2</Title>
      <Subcolumn>
        <d>1.20</d>
        <d>100</d>
        <d>5</d>
        <d>0</d>
        <d>1.5</d>
      </Subcolumn>
    </YColumn>
    <YColumn Width="81" Decimals="6" Subcolumns="1">
      <Title>MH1</Title>
      <Subcolumn>
        <d>120</d>
        <d>100</d>
        <d>5</d>
        <d>0</d>
        <d>1.5</d>
      </Subcolumn>
    </YColumn>
  </Table>
</GraphPadPrismFile>

据我所知,我有一个节点表,它同样有XColumn和YColumn节点,这两个节点既有标题又有子列节点。这些数据包含我想要转换成R-data.frame的原始数据。

到目前为止,我已经成功地导入了一个文件:(YColumn是上述文件的路径)

代码语言:javascript
复制
xData <- xmlParse(file)
xData.rt <- xmlRoot(xData)
xmlToDataFrame(xData.rt[["Table"]][["YColumn"]][["Subcolumn"]])

这给了我作为data.frame的第一个YColumn:

代码语言:javascript
复制
  text
1  120
2  100
3    5
4    0
5  1.5

有没有一个(也许也更简单?)将所有X和Y列导入到一个data.frame中的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-26 21:29:03

这里有一些想法..。

这将查找所有XColumnYColumn节点:

代码语言:javascript
复制
columns = xpathSApply(xData,"//ns:XColumn|//ns:YColumn",
             namespaces=c(ns="http://graphpad.com/prism/Prism.htm"))

然后,给定其中之一,这将获得标题和值:

代码语言:javascript
复制
> xpathSApply(columns[[2]],".//ns:Title",
    namespaces=c(ns="http://graphpad.com/prism/Prism.htm"),xmlValue)
[1] "ML"
> xpathSApply(columns[[2]],".//ns:d",
    namespaces=c(ns="http://graphpad.com/prism/Prism.htm"),xmlValue)
[1] "120" "100" "5"   "0"   "1.5"

您可以通过检查某个对象的xmlName来判断它是XColumn还是YColumn

代码语言:javascript
复制
> xmlName(columns[[1]])
[1] "XColumn"
> xmlName(columns[[2]])
[1] "YColumn"

这可能是足够的构造工具包。在columns上循环,并使用cbind堆叠这些值……

显然,基于字符的数字需要使用as.numeric进行转换,我不太确定您希望如何组合XColumnYColumn值,因为XColumn值少了一个……

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

https://stackoverflow.com/questions/25506099

复制
相关文章

相似问题

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