用R中的XML文件创建合适的数据框

时间:2019-03-06 22:28:15

标签: r xml

使用此世界银行数据: GDP CURRENT USD

我想使用Rstudio中的xmlToDataFrame包创建一个合适的数据框 我对方法{{1}}的问题是它无法识别节点,并且仅显示一个具有15576个变量的观察结果...

关于在堆栈上提出的其他方法,我没有设法创建一个行名称=年和3列(“国家”,“指标”,“值”)的良好数据框

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作

{% for t in topics|dictsortreversed:"count_of_questions" %}
    {{ t.count_of_questions }}
{% endfor %}

选项1

library(XML)
library(tidyverse)

xml <- xmlParse("API_NY.GDP.MKTP.CD_DS2_en_xml_v2_10475111.xml")

我们需要两次df <- xml %>% getNodeSet("//record") %>% map(~setNames( rbind.data.frame(xmlSApply(.x, xmlValue), stringsAsFactors = F), xmlSApply(.x, xmlGetAttr, "name"))) %>% bind_rows() head(df) # Country or Area Item Year Value #1 Aruba GDP (current US$) 1960 #2 Aruba GDP (current US$) 1961 #3 Aruba GDP (current US$) 1962 #4 Aruba GDP (current US$) 1963 #5 Aruba GDP (current US$) 1964 #6 Aruba GDP (current US$) 1965 调用才能分别获取值

选项2

xmlSApply

我们使用colnames <- c("Country", "Item", "Year", "Value") df <- xml %>% getNodeSet("//record") %>% xmlToDataFrame() %>% setNames(colnames) head(df) # Country Item Year Value #1 Aruba GDP (current US$) 1960 #2 Aruba GDP (current US$) 1961 #3 Aruba GDP (current US$) 1962 #4 Aruba GDP (current US$) 1963 #5 Aruba GDP (current US$) 1964 #6 Aruba GDP (current US$) 1965 将节点xmlToDataFrame强制转换为list;不幸的是,我们失去了字段名称,因此我们需要以事后方式将这些名称添加为列名称。