【问题标题】:List of data frames to XML到 XML 的数据帧列表
【发布时间】:2023-03-06 19:57:02
【问题描述】:

我有以下数据框:

tests <- c("test1", "test1", "test1")
obs <- c("observation1", "observation2", "observation3")

test <- data.frame(tests, obs, stringsAsFactors = FALSE)

我想将其转换为具有特定格式的 XML 文件:

library(XML)

example <- newXMLNode("example")
addAttributes(example, name=test$tests[1])
observations <- lapply(seq_along(test$obs),function(x){newXMLNode("obs",
                attrs = c(ID = paste(test$tests[1], "-", as.character(x), sep="")),
                .children = test$obs[x])
})
addChildren(example, observations)

saveXML(example, file=paste0(test$tests[1], ".xml"))

这会将这个名为 test1.xml 的项目保存到我的工作目录:

<example name="test1">
  <obs ID="test1-1">observation1</obs>
  <obs ID="test1-2">observation2</obs>
  <obs ID="test1-3">observation3</obs>
</example> 

但是如果我有一个数据框列表而不是一个数据框呢?像这样:

tests <- c("test1", "test1", "test1", "test2", "test2", "test2", "test3", "test3")
obs <- c("observation1", "observation2", "observation3", "observation4", "observation5", "observation6", "observation7", "observation8")
test <- data.frame(tests, obs, stringsAsFactors = FALSE)
test <- split(test, test$tests)

我想将它们中的每一个保存为自己的 XML 文件,现在保存为 test1.xml、test2.xml、test3.xml,但上面的代码不起作用,我没有修复它。我知道我应该以某种方式遍历每个列表项。

【问题讨论】:

  • 把你的XML创建代码放到一个通用函数里然后运行就行了?

标签: xml r dataframe


【解决方案1】:

理查德斯克里文是正确的。这是执行此操作的代码:

dfToXML <- function(test) {
    example <- newXMLNode("example")
    addAttributes(example, name=test$tests[1])
    observations <- lapply(seq_along(test$obs),function(x){newXMLNode("obs",
                    attrs = c(ID = paste(test$tests[1], "-", as.character(x), sep="")),
                    .children = test$obs[x])
    })
    addChildren(example, observations)
    saveXML(example, file=paste0(test$tests[1], ".xml"))
}
lapply(test, dfToXML)

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多