如何解析XML到R数据框

前端之家收集整理的这篇文章主要介绍了如何解析XML到R数据框前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图解析XML到R数据框,这个链接帮助了我很多:

how to create an R data frame from a xml file

但仍然我不能弄清楚我的问题:

这里是我的代码

data <- xmlParse("http://forecast.weather.gov/MapClick.PHP?lat=29.803&lon=-82.411&FcstType=digitalDWML")
xmlToDataFrame(nodes=getNodeSet(data1,"//data"))[c("location","time-layout")]
step1 <- xmlToDataFrame(nodes=getNodeSet(data1,"//location/point"))[c("latitude","longitude")]
step2 <- xmlToDataFrame(nodes=getNodeSet(data1,"//time-layout/start-valid-time"))
step3 <- xmlToDataFrame(nodes=getNodeSet(data1,"//parameters/temperature"))[c("type="hourly"")]

我想要的数据框是这样的:

latitude  longitude   start-valid-time   hourly_temperature
29.803     -82.411  2013-06-19T15:00:00-04:00    91
29.803     -82.411  2013-06-19T16:00:00-04:00    90

我被困在xmlToDataFrame,任何帮助将非常感谢,谢谢。

XML格式的数据很少以允许xmlToDataFrame函数工作的方式组织。你最好在列表中提取所有内容,然后在数据框中将列表绑定在一起:
require(XML)
data <- xmlParse("http://forecast.weather.gov/MapClick.PHP?lat=29.803&lon=-82.411&FcstType=digitalDWML")

xml_data <- xmlToList(data)

在您的示例数据的情况下,获取位置和开始时间是相当简单:

location <- as.list(xml_data[["data"]][["location"]][["point"]])

start_time <- unlist(xml_data[["data"]][["time-layout"]][
    names(xml_data[["data"]][["time-layout"]]) == "start-valid-time"])

温度数据有点复杂。首先,您需要访问包含温度列表的节点。然后,您需要提取这两个列表,查看每个列表,并选择一个具有“hourly”作为其值之一。然后,您需要仅选择该列表,但只保留具有“value”标签的值:

temps <- xml_data[["data"]][["parameters"]]
temps <- temps[names(temps) == "temperature"]
temps <- temps[sapply(temps,function(x) any(unlist(x) == "hourly"))]
temps <- unlist(temps[[1]][sapply(temps,names) == "value"])

out <- data.frame(
  as.list(location),"start_valid_time" = start_time,"hourly_temperature" = temps)

head(out)
  latitude longitude          start_valid_time hourly_temperature
1    29.81    -82.42 2013-06-19T16:00:00-04:00                 91
2    29.81    -82.42 2013-06-19T17:00:00-04:00                 90
3    29.81    -82.42 2013-06-19T18:00:00-04:00                 89
4    29.81    -82.42 2013-06-19T19:00:00-04:00                 85
5    29.81    -82.42 2013-06-19T20:00:00-04:00                 83
6    29.81    -82.42 2013-06-19T21:00:00-04:00                 80

猜你在找的XML相关文章