使用以下世界银行数据:GDP CURRENT USD
我想使用Rstudio中的XML包创建一个合适的数据帧。我使用xmlToDataFrame方法的问题是它不能识别节点,并且只显示一个包含15576个变量的观察值……
关于堆栈上提出的其他方法,我没有设法创建一个好的数据框架,其中rownames = year,3 colomn ("Country","Indicator","Value")
提前感谢您的帮助!
发布于 2019-03-07 06:57:39
您可以执行以下操作
library(XML)
library(tidyverse)
xml <- xmlParse("API_NY.GDP.MKTP.CD_DS2_en_xml_v2_10475111.xml")选项1
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我们需要两个xmlSApply调用来分别获取值和名称。
选项2
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强制转换为data.frame;不幸的是,我们丢失了字段名,因此我们需要以一种临时的方式将名称添加为列名。
https://stackoverflow.com/questions/55033196
复制相似问题