由于我是 R 的新手,我正在尝试学习如何从 XML 文件中提取两个值并循环遍历我工作目录中的 5603 个其他(小的,<2kb)XML 文件。
我已经阅读了很多关于“循环”的主题,但发现这相当令人困惑 - 特别是因为循环 XML 文件似乎与循环其他文件不同,对吗?
我正在使用 XML 结构的在线数据。
对于每个 XML 文件,我想将“ZipCode”和“AwardAmount”写入表格。
运行以下代码我确实检索了 ZipCode 和 AwardAmount,但仅限于第一个文件。如何编写适当的循环并将其写入表?
xmlfiles=list.files(pattern="*.xml")
for (i in 1:length(xmlfiles)){
doc= xmlTreeParse("xmlfiles[i]", useInternal=TRUE)
zipcode<-xmlValue(doc[["//ZipCode"]])
amount<-xmlValue(doc[["//AwardAmount"]])
}
有人有什么建议吗?
最佳答案
这可能对您有用。我摆脱了 for
循环并使用 sapply
。
xmlfiles <- list.files(pattern = "*.xml")
txtfiles <- gsub("xml", "txt", xmlfiles, fixed = TRUE)
txtfiles
是一组新文件名,用作每次运行的输出文件。
sapply(seq(xmlfiles), function(i){
doc <- xmlTreeParse(xmlfiles[i], useInternal = TRUE)
zipcode <- xmlValue(doc[["//ZipCode"]])
amount <- xmlValue(doc[["//AwardAmount"]])
DF <- data.frame(zip = zipcode, amount = amount)
write.table(DF, quote = FALSE, row.names = FALSE, file = txtfiles[i])
})
如果您在运行时遇到问题,请告诉我。
关于xml - 在 R 中,如何从 XML 文件中提取两个值,遍历 5603 个文件并写入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377350/