您好我在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数据来删除错误吗?
提前致谢。
答案 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)
然后在最后我们只是“合并”这两部分,重复细节中每一行的标题。