我正在尝试将一个xml文件导入到R.它的格式如下,每行都有一个事件,后跟一些属性 - 这些属性取决于事件类型。此文件为0.7GB,未来版本可能更大。我想创建一个数据框,其中每个事件都在一个新行上,所有可能的属性都在不同的列中(这意味着某些事件将根据事件类型为空)。我在其他地方寻找答案,但他们似乎都在处理树形结构中的XML文件,我无法弄清楚如何将它们应用于这种格式。
我是R的新手,没有XML文件的经验,所以请给我一些“for dummies”的答案,并附上大量的解释。谢谢!
<?xml version="1.0" encoding="utf-8"?>
<events version="1.0">
<event time="21510.0" type="actend" person="3" link="1" actType="h" />
<event time="21510.0" type="departure" person="3" link="1" legMode="car" />
<event time="21510.0" type="PersonEntersVehicle" person="3" vehicle="3" />
<event time="21510.0" type="vehicle enters traffic" person="3" link="1" vehicle="3" networkMode="car" relativePosition="1.0" />
...
</events>
答案 0 :(得分:1)
您可以尝试这样的事情:
original_xml <- '<?xml version="1.0" encoding="utf-8"?>
<events version="1.0">
<event time="21510.0" type="actend" person="3" link="1" actType="h" />
<event time="21510.0" type="departure" person="3" link="1" legMode="car" />
<event time="21510.0" type="PersonEntersVehicle" person="3" vehicle="3" />
<event time="21510.0" type="vehicle enters traffic" person="3" link="1" vehicle="3" networkMode="car" relativePosition="1.0" />
</events>'
library(xml2)
data2 <- xml_children(read_xml(original_xml))
attr_names <- unique(names(unlist(xml_attrs(data2))))
xmlDataFrame <- as.data.frame(sapply(attr_names, function (attr) {
xml_attr(data2, attr = attr)
}), stringsAsFactors = FALSE)
#-- since all columns are strings, you may want to turn the numeric columns to numeric
xmlDataFrame[, c("time", "person", "link", "vehicle")] <- sapply(xmlDataFrame[, c("time", "person", "link", "vehicle")], as.numeric)
如果您有其他“数字”列,则可以在末尾添加它们以将数据转换为适当的类。