[英]Convert XML with repeated nodes to R data frame
我正在嘗試將具有相同名稱(但由屬性值唯一標識)的重復節點的XML展平為R中的展平數據。
<?xml version="1.0"?>
<data>
<tr id="1">
<A id="100">100</A>
<B>abc</B>
<C>true</C>
</tr>
<tr id="2">
<A id="200">200</A>
<A id="300">300</A>
<B>wxyz</B>
<C>FALSE</C>
</tr>
</data>
所需的結果是一個data.frame,看起來像
tr A B C
1 100 abc true
2 200 wxyz FALSE
2 300 wxyz FALSE
我已經閱讀了xml ...
library(XML)
xmlfile <- "H:/My Documents/Code/R/xml/example.xml"
xmldoc <- xmlTreeParse(xmlfile)
使用xpathSApply(),我可以毫無問題地檢索每個節點和屬性,例如,
data.frame(id = xpathSApply(xmldoc, "//A", xmlGetAttr, "id"))
但是我無法在data.frame中組織整個批次,因為“ A”節點的數量(3)大於所有其他節點的數量(2)。
任何幫助將不勝感激 ...
您可能需要為每個節點創建一個data.frame並合並結果。
tr <- getNodeSet(xmldoc, "//tr")
x <- lapply(tr, function(x) data.frame(tr = xpathSApply(x, "." , xmlGetAttr, "id"),
A = xpathSApply(x, ".//A", xmlValue),
B = xpathSApply(x, ".//B", xmlValue),
C = xpathSApply(x, ".//C", xmlValue) ))
do.call("rbind", x)
tr A B C
1 1 100 abc true
2 2 200 wxyz FALSE
3 2 300 wxyz FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.