我正在尝试从原则上为.xml文件的Graphpad Prism .pzfx文件导入原始数据。我拿出了大部分棱镜特定的东西,只留下了我感兴趣的那部分。
<?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是上述文件的路径)
xData <- xmlParse(file)
xData.rt <- xmlRoot(xData)
xmlToDataFrame(xData.rt[["Table"]][["YColumn"]][["Subcolumn"]])
这给了我作为data.frame的第一个YColumn:
text
1 120
2 100
3 5
4 0
5 1.5
有没有一个(也许也更简单?)将所有X和Y列导入到一个data.frame中的方法?
发布于 2014-08-26 21:29:03
这里有一些想法..。
这将查找所有XColumn
和YColumn
节点:
columns = xpathSApply(xData,"//ns:XColumn|//ns:YColumn",
namespaces=c(ns="http://graphpad.com/prism/Prism.htm"))
然后,给定其中之一,这将获得标题和值:
> 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
> xmlName(columns[[1]])
[1] "XColumn"
> xmlName(columns[[2]])
[1] "YColumn"
这可能是足够的构造工具包。在columns
上循环,并使用cbind
堆叠这些值……
显然,基于字符的数字需要使用as.numeric
进行转换,我不太确定您希望如何组合XColumn
和YColumn
值,因为XColumn
值少了一个……
https://stackoverflow.com/questions/25506099
复制相似问题