【问题标题】:Reading XML data in R [duplicate]在R中读取XML数据[重复]
【发布时间】:2014-02-14 21:44:52
【问题描述】:

我正在尝试在 R 中阅读此 file。我尝试使用 XML package,但我不知道数据集中有什么,而且我之前没有使用过这个包。

如果你们能提供任何帮助,我将不胜感激。

谢谢。

塞巴斯蒂安。

【问题讨论】:

标签: xml r


【解决方案1】:

没有办法绕过它 - 您需要了解 XML 和 XPath 才能在 R 中使用它。假设您这样做了,请在浏览器中查看文档以了解其结构。然后,这应该让您开始使用 XML 包。

library(XML)
xml <- xmlParse("http://data.mcc.gov/raw/xml/MCC_HN.xml")

org        <- xpathApply(xml,"//iati-activity/reporting-org",xmlValue)
id         <- xpathApply(xml,"//iati-activity/iati-identifier",xmlValue)
title      <- xpathApply(xml,"//iati-activity/title",xmlValue)
desc.1     <- xpathApply(xml,"//iati-activity/description[@type='1']",xmlValue)
desc.2     <- xpathApply(xml,"//iati-activity/description[@type='2']",xmlValue)
status     <- xpathApply(xml,"//iati-activity/activity-status",xmlValue)
start.planned <- xpathApply(xml,"//iati-activity/activity-date[@type='start-planned']",xmlValue)
start.actual  <- xpathApply(xml,"//iati-activity/activity-date[@type='start-actual']",xmlValue)
end.planned   <- xpathApply(xml,"//iati-activity/activity-date[@type='end-planned']",xmlValue)
end.actual    <- xpathApply(xml,"//iati-activity/activity-date[@type='end-actual']",xmlValue)

df <- data.frame(cbind(org,id, title, status, 
                       start.planned, start.actual, end.planned, end.actual,
                       desc.1, desc.2))

阅读关于我上面使用过的函数的文档,例如xmlParse(...)、xpathApply(...) 和 xmlValue(...) 来弄清楚代码在做什么。

注意:XML 包中有一个函数xmlToDataFrame(...)。您的文档的问题是您有多个具有相同标签名称的元素(例如:description 和 activity-date),使用 type= 属性可以消除歧义。 xmlToDataFrame(...) 不知道如何处理,所以你需要努力去做......

【讨论】:

  • 您是如何知道 XML 数据中包含哪些变量的?你的帮助非常得心应手。谢谢!
  • 基本上,您需要在浏览器中查看文件。可以通过编程方式查看标签名称列表,但在浏览器中查看是最简单的。
【解决方案2】:

不清楚你想对数据做什么,但我们明白了

xml = xmlParse("http://data.mcc.gov/raw/xml/MCC_HN.xml")

然后查询所有“交易”记录的结果,并把它们做成一个数据框

df <- xmlToDataFrame(xml["//transaction"])

与

> dim(df)
[1] 730  11
> head(df, 2)
  aid-type
1         
2         
                                                                description
1   Commitment: Honduras-614G Fund-Not Applicable-Not Applicable-2011-04-01
2 Disbursement: Honduras-614G Fund-Not Applicable-Not Applicable-2011-04-01
  disbursement-channel finance-code flow-type                     provider-org
1                                             Millennium Challenge Corporation
2                                             Millennium Challenge Corporation
  receiver-org tied-status transaction-date transaction-type     value
1     Honduras                   2011-04-01       COMMITMENT 274380.75
2     Honduras                   2011-04-01     DISBURSEMENT      0.00

也许您想提取与“辅助类型”相关的属性并将其添加到数据框中;使用 XPath 这样做

df$`aid-type-code` <- as.character(xml["//aid-type/@code"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2011-04-27
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多