当我在r中使用xml时,我发现此错误消息

时间:2014-07-16 23:22:06

标签: xml r

您好我在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数据来删除错误吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不确定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)

然后在最后我们只是“合并”这两部分,重复细节中每一行的标题。