在 R 中将 XML 转换为数据框

费尔南多·韩

在我从网上得到的 XML 响应中,有一部分数据的结构如下:

<votos>
<Deputado Nome="Roberto Britto" ideCadastro="141529" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="Luiz Argôlo" ideCadastro="160547" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="José Carlos Araújo" ideCadastro="74140" Partido="PSD " UF="BA" Voto="Sim "/>
</votos>

我解析文件如下:

doc <- xmlTreeParse(raw_result,useInternal=TRUE)
rootNode <- xmlRoot(doc)

然后尝试创建我在开头显示的节点的数据框,如下所示:

rootvotacao <- rootNode[[4]][[1]][[2]]
votacao2 <- xmlSApply(rootvotacao, function(x) xmlSApply(x, xmlValue))
votacao2_df <- data.frame(t(votacao2),row.names=NULL)

但是,我只得到一个表,每列两列,Deputado一行包含list().

我想要的是得到一个表格,每行一行Deputado和 5 列:Nome, ideCadastro, Partido, UF, Voto

有什么想法吗?谢谢!

阿姆斯

您可以使用XMLpackage 并xmlToList完成此操作。

library(XML)

raw_result <- '<votos>
<Deputado Nome="Roberto Britto" ideCadastro="141529" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="Luiz Argôlo" ideCadastro="160547" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="José Carlos Araújo" ideCadastro="74140" Partido="PSD " UF="BA" Voto="Sim "/>
</votos>'

#i faced encoding issue hence

raw_result <- iconv(raw_result,'latin1','utf-8')



do.call(rbind,xmlToList(raw_result))

输出:

> do.call(rbind,xmlToList(raw_result))
         Nome                   ideCadastro Partido UF   Voto  
Deputado "Roberto Britto"       "141529"    "PP "   "BA" "Sim "
Deputado "Luiz Argôlo"         "160547"    "PP "   "BA" "Sim "
Deputado "José Carlos Araújo" "74140"     "PSD "  "BA" "Sim "

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章