簡體   English   中英

將具有重復節點的XML轉換為R數據幀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM