2

我正在尝试将 XML 文件中的一些数据下载并组织到 R 中。我查看了相关的问题和文档,但大多数都提到使用 xml 包解析函数,这似乎无法弄清楚我的数据。所以我的两个问题是 1)如何让 R 将实际数据读入数据框而不是 XML 结构并进行标记?2)我可以使用 XML 代码中的 XML 结构信息在 R 中解析它吗?

这就是我正在使用的(以及迄今为止我失败的尝试):

library("XML")
datahere = c("C:/.../R/feddata/data/")
setwd(datahere)

download.file("http://www.newyorkfed.org/markets/pomo/xml/v3_0/pomoXML.cfm?SHOWMORE=TRUE&date1=01/01/2009&date2=01/10/2009",paste(datahere,"feddata.xml",sep=""))

feddata = xmlInternalTreeParse("feddata.xml")
feddataset = xmlRoot(feddata)
names(feddata)
feddatanodeset = getNodeSet(feddata,"//DataSet/*")
feddatalist = xmlToList("feddata.xml")
feddatalist[2][1][1]
feddataDF = xmlToDataFrame(feddata)
feddata$doc$file$DataSet
feddata["doc"]["file"]["DataSet"]

feddataRoot = xmlRoot(feddata)
feddata2 = xmlSApply(feddata, function(x) xmlSApply(x,xmlValue))
feddata2 = xmlSApply(feddata$DataSet, function(x) xmlSApply(x,xmlValue))

非常感谢您的想法,建议,建议等。如果您知道我可以在某个地方使用的另一个堆栈问题或教程或示例,那也可以使用,不想多余。谢谢!

4

2 回答 2

5

这是你想要的吗?

library(XML)
datahere = "~/"
setwd(datahere)
download.file("http://www.newyorkfed.org/markets/pomo/xml/v3_0/pomoXML.cfm?SHOWMORE=TRUE&date1=01/01/2009&date2=01/10/2009",paste(datahere,"feddata.xml",sep=""))
tt = xmlParse("feddata.xml")
out <- getNodeSet(tt, "//*[name()='out:issue']", fun=xmlToList)
df <- data.frame(do.call(rbind, out))
head(df)

  confidentiality couponRate currency decimals inclusion maturityDate multiplier rate securityType status
1               F      4.750      USD        0      true   2011-01-18          0    P          FMC      A
2               F      4.500      USD        0      true   2011-02-15          0    P          FNM      A
3               F      4.625      USD        0      true   2011-02-18          0    P          FHL      A
4               F      3.250      USD        0      true   2011-02-25          0    P          FMC      A
5               F      5.500      USD        0      true   2011-03-15          0    P          FNM      A
6               F      5.625      USD        0      true   2011-03-15          0    P          FMC      A
      value
1  40000000
2   3000000
3   2000000
4         0
5  49000000
6 155000000
于 2013-11-02T23:01:12.713 回答
3

另一种使用plyr和的解决方案XML

library(XML)
doc <- xmlParse(
  "http://www.newyorkfed.org/markets/pomo/xml/v3_0/pomoXML.cfm?SHOWMORE=TRUE&date1=01/01/2009&date2=01/10/2009"  
)
doc_list <- xmlToList(doc)

library(plyr)
doc_issues <- ldply(doc_list$DataSet$Group, function(d){ 
  if ("issue" %in% names(d)){
    d$issue
  } else {
    NULL
  }
}) 
于 2013-11-03T02:29:33.000 回答