您好,我正在 Rstudio 中处理 xml。目标是将 xml 转换为 r 数据框,我正在尝试包文件夹中名为 tides.xml 的示例数据。
tides = system.file("exampleData", "tides.xml", package = "XML")
也许我们可以看到前几列的项目是不变的:
像这样
origin
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
NOAA/NOS/CO-OPS
因此当我使用
xmlToDataFrame(xmlRoot(tides.str))
它返回错误:
Error in `[<-.data.frame`(`*tmp*`, i, names(nodes[[i]]), value = c("2010/11/13Sat06:08 AM4.74H", :
duplicate subscripts for columns
我知道我可以做这样的事情:
xmlToDataFrame(nodes = xmlChildren(xmlRoot(tides.str)[["data"]]))
生成一个数据框,但它只是一个子集,我需要手动插入前几列。
所以我在想,是否可以通过更改 xmlToDataFrame() 函数中的一些参数并使用整个 xml 数据来消除错误?
提前致谢。
最佳答案
我不确定 xmlToDataFrame
是否可行。但是您可以提取所有非数据节点并自己将其转换为 data.frame 而不会太麻烦。
library(XML)
tides = system.file("exampleData","tides.xml", package="XML")
tides.str<-xmlParse(tides)
detaildf<-xmlToDataFrame(nodes = getNodeSet(tides.str, "/datainfo/data/item"))
header <- getNodeSet(tides.str, "/datainfo/*[not(self::data)]")
headerdf <- as.data.frame(as.list(setNames(xmlSApply(header, xmlValue),
xmlSApply(header, xmlName))))
merge(headerdf, detaildf)
然后在最后我们只是“合并”这两个部分以在详细信息中重复每一行的标题。
关于xml - 我在 r 中使用 xml 时发现此错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24792471/