我是XML数据库的新手。
我会尝试解释我的问题。
我从墨西哥政府页面的xml文件中存储了一个数据库,我试图下载该数据库以用于我的分析。
您可以在此找到数据的页面。
直接下载链接是这个,我认为就像一个外部存储库。真诚的,我不知道。
https://publicacionexterna.azurewebsites.net/publicaciones/prices
如果单击上面的链接,将自动下载xml格式的数据库。
该数据库是关于零售商的墨西哥天然气价格,而他的位置是全国十进制度。
我能够下载数据库并粘贴到Windows .xls文件,然后粘贴到.csv存档,然后上传到我的R环境进行分析。
一般问题是,当我试图直接从页面下载到我的环境时,我无法获得允许我执行分析的结构化数据库格式。
我获取重复的行,并且无法提取每个数据级别的所有属性。
这是我自己写的脚本,并在互联网上寻求帮助。
# CRE FILES
library(easypackages)
my_packages <- c("rlist","readr", "tidyverse", "lubridate", "stringr",
"rebus", "stringi", "purrr", "geosphere", "XML", "RCurl", "plyr")
libraries(my_packages)
# Link de descarga de documentos
link1 <-(https://publicacionexterna.azurewebsites.net/publicaciones/prices")
# First we load the xml file to the enviroment
data_prices <- getURL(link1)
xmlfile <- xmlParse(data_prices)
class(xmlfile)
xmltop <- xmlRoot(xmlfile)
base <- ldply(xmlToList(xmltop),data.frame)
问题在于我希望将日期作为另一列,而不是一行。谢谢你的回答。
答案 0 :(得分:1)
这样的事情会让你得到一个包含不同列中所有数据的数据框。
library(RCurl)
library(XML)
# Set link to website
link1 <-("https://publicacionexterna.azurewebsites.net/publicaciones/prices")
# Get data from webpage
data_prices <- getURL(link1)
# Parse XML data
xmlfile <- xmlParse(data_prices)
# Get place nodes
places <- getNodeSet(xmlfile, "//place")
# Get values for each place
values <- lapply(places, function(x){
# Get current place id
pid <- xmlAttrs(x)
# Get values for each gas type for current place
newrows <- lapply(xmlChildren(x), function(y){
# Get type and update time values
attrs <- xmlAttrs(y)
# Get price value
price <- xmlValue(y)
names(price) <- "price"
# Return values
return(c(pid, attrs, price))
})
# Combine rows to single list
newrows <- do.call(rbind, newrows)
# Return rows
return(newrows)
})
# Combine all values into a single dataframe
df <- as.data.frame(do.call(rbind, values), stringsAsFactors = FALSE)
# Reset row names for dataframe
row.names(df) <- c(1:nrow(df))