考虑以下XML
示例
library(xml2)
myxml <- read_xml('
<data>
<obs ID="a">
<name> John </name>
<hobby> tennis </hobby>
<hobby> golf </hobby>
<skill> python </skill>
</obs>
<obs ID="b">
<name> Robert </name>
<skill> R </skill>
</obs>
</data>
')
在这里,我想从此 XML 中获取一个(R 或 Pandas)数据框,其中包含列name
和hobby
.
但是,如您所见,存在对齐问题,因为hobby
在第二个节点中缺少并且 John 有两个爱好。
在 R 中,我知道如何一次提取一个特定值,例如使用xml2
如下:
myxml%>%
xml_find_all("//name") %>%
xml_text()
myxml%>%
xml_find_all("//hobby") %>%
xml_text()
但是如何在数据框中正确对齐这些数据?也就是说,我怎样才能获得如下的数据框(注意我是如何加入|
约翰的两个爱好的):
# A tibble: 2 × 3
name hobby skill
<chr> <chr> <chr>
1 John tennis|golf python
2 Robert <NA> R
在 R 中,我更喜欢使用xml2
and的解决方案dplyr
。在 Python 中,我想最终得到一个 Pandas 数据框。此外,在我的 xml 中还有更多我想要解析的变量。我想要一个解决方案,它允许用户解析其他变量而不会过多地弄乱代码。
谢谢!
编辑:感谢大家提供这些出色的解决方案。他们都非常好,有很多细节,很难找到最好的。再次感谢!