繁体   English   中英

将XML导入R数据框

[英]Import XML to R data frame

我正在尝试将xml文件导入R。它的格式如下,每行都有一个事件,后跟许多属性-这些属性取决于事件类型。 该文件为0.7GB,将来的版本可能更大。 我想创建一个数据框,其中每个事件都在新行上,所有可能的属性都在单独的列中(这意味着某些事件将为空,具体取决于事件类型)。 我在别处寻找答案,但是它们似乎都在以树形结构处理XML文件,因此我不知道如何将它们应用于这种格式。

我是R语言的新手,没有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>

您可以尝试如下操作:

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)

如果还有其他“数字”列,则可以在末尾添加它们,以将数据转换为适当的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM