R 快速 XML 解析

2024-01-12

当前在 R 中将 XML 文件转换为数据帧的最快方法是什么?

XML 如下所示:(注意 - 并非所有行都包含所有字段)

  <row>
    <ID>001</ID>
    <age>50</age>
    <field3>blah</field3>
    <field4 />
  </row>
  <row>
    <ID>001</ID>
    <age>50</age>
    <field4 />
  </row>

我尝试了两种方法:

  1. The xml转数据帧 http://www.inside-r.org/packages/cran/XML/docs/xmlToDataFrameXML 库中的函数
  2. 发布面向速度的 xmlToDF 函数here http://hopstat.wordpress.com/2014/01/14/faster-xml-conversion-to-data-frames/

对于具有 1.6k“行”和 114“列”的 8.5 MB 文件,xmlToDataFrame 花费了 25.1 秒,而 xmlToDF 在我的计算机上花费了 16.7 秒。

与能够在 0.4 秒内完成这项工作的 python XML 解析器(例如 xml.etree.ElementTree)相比,这些时间相当长。

在 R 中是否有更快的方法来做到这一点,或者 R 中是否有一些基本的东西阻止我们更快地做到这一点?

关于这一点的一些说明将会非常有帮助!


已更新评论

d = xmlRoot(doc)
size = xmlSize(d)

names = NULL
for(i in 1:size){
    v = getChildrenStrings(d[[i]])
    names = unique(c(names, names(v)))
}

for(i in 1:size){
    v = getChildrenStrings(d[[i]])
    cat(paste(v[names], collapse=","), "\n", file="a.csv", append=TRUE)
}

对于 1000x100 xml 记录,此过程大约需要 0.4 秒。如果您知道变量名称,甚至可以省略第一个 for 循环。

注意:如果你的xml内容包含逗号、引号,你可能要特别注意它们。在这种情况下,我推荐下一个方法。


如果你想动态构建 data.frame ,你可以这样做data.table, data.table比上面的csv方法慢一点,但是比上面的方法快data.frame

m = data.table(matrix(NA,nc=length(names), nr=size))
setnames(m, names)
for (n in names) mode(m[[n]]) = "character"
for(i in 1:size){
    v = getChildrenStrings(d[[i]])
    m[i, names(v):= as.list(v), with=FALSE]
}
for (n in names) m[, n:= type.convert(m[[n]], as.is=TRUE), with=FALSE]

对于同一文档,大约需要 1.1 秒即可完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 快速 XML 解析 的相关文章

随机推荐

  • 简单的Java“新”概念问题

    编译器显示错误new Stock 2 after expect public class TestStockUI Stock stock new Stock 2 stock 0 new Stock Microsoft MSFT 15 69
  • 如何在 SQL Server 2008 上找到禁用的索引

    不久前 当我向 SQL Server 数据库中执行一些批量数据插入时 我禁用了许多索引以提高插入性能 我现在需要返回并重建 重新启用它们 不幸的是 我不确定我禁用了哪些索引 有没有办法可以查询以确定哪些索引被禁用并且应该重新启用 selec
  • CAS 与同步性能

    我已经有这个问题很长一段时间了 试图阅读大量资源并了解正在发生的事情 但我仍然无法很好地理解为什么事情是这样的 简而言之 我正在尝试测试如何CAS将执行 vssynchronized在有竞争和没有竞争的环境中 我已经把这个JMH test
  • “无法分析类:可能未加载或没有自动加载器?”

    我用一个 viewhelper 创建了 我的第一个 扩展 糟糕 出现错误 无法分析类 My Mlv ViewHelpers Format ReplacenewlinesViewHelper 可能未加载或没有自动加载器 使用中 有新闻 nam
  • ASP.Net 表单可以有 method=get 或 post 属性吗?

    我是 ASP NET 新手 我的问题是 带有 runat server 的 ASP net 表单可以有一个方法属性吗 例如
  • 我的 IIS7 网站的元数据库密钥在哪里?

    我正在尝试设置我的网站设置项目的自动 每晚 安装 我可以在命令行上指定一些安装时值 特别是 添加一个TARGETSITE值定义我的新部署将前往的网站 如何在 IIS7 安装中找到我的网站的元数据库密钥 例如 LM W3SVC 2135484
  • 测试 Windows Azure Web 应用程序的最大用户负载

    我正在对新兴 Web 技术进行一些研究 并创建了一个非常简单的 Azure 网站 该网站使用 Web 套接字和 mongo db 作为数据库 我已经设法让所有组件一起工作 现在必须对应用程序执行负载测试 主要标准是应用程序可以支持的最大用户
  • Babel 5 插件正在使用不受支持的 Babel 版本运行。尝试更新 babel-relay-plugin

    Doing Lynda 构建和部署全栈 React 应用程序教程 并卡在某个点上 出现以下错误 src index js Error BABEL Users kukodajanos Workspace ticket src index js
  • QueryOver 上的 GroupBy SqlFunction

    我有一个包含所有不同帐户名称前缀 a z 的列表 我使用这些前缀获取的 var accounts this SessionManager GetActiveSession QueryOver
  • LinqToLucene 和 Lucene.Net.Linq 之间的区别

    Are the LinqToLucene http linqtolucene codeplex com 和Lucene Net Linq https github com themotleyfool Lucene Net Linq项目不同
  • 将表单设置为父级抛出异常“顶级控件无法添加到控件”

    我想从另一个表单访问一个表单的变量 单击主窗体内的按钮时 我想将主窗体设置为父窗体 然后调出另一个窗体 子窗体 我将在其中访问主窗体的变量 我的点击处理程序如下 private void btnSystem Click object sen
  • 以时间间隔链接 UIView 动画

    我需要对 3 个 UIView 进行动画处理 淡入 淡出 1个动画持续时间为0 6秒 淡入 淡出周期为0 6 0 6秒 但我需要在 0 2 秒内启动动画 第一个动画应在 0 0 秒内启动 第二个动画应在 0 2 秒内启动 第三个动画应在 0
  • SwiftUI 列表背景的默认颜色是什么?

    我知道如何更改 SwiftUI 视图列表的背景颜色 但我找不到默认颜色 我尝试过使用 MacOS 的 数字色度计 但它无法正确识别颜色 正如您在此图中看到的 我尝试设置列表行的背景颜色 使用 listRowBackground根据数字色度计
  • kubernetes go 客户端补丁示例

    经过一番搜索后 我无法找到使用任何策略在 Patch 上执行的 golang Kube 客户端示例 我正在寻找执行此操作的 golang 示例 kubectl patch pod valid pod type json p op repla
  • 使用wp_insert_post()创建一个新页面

    我在 PHP 函数中有以下代码 当我安装允许您创建帖子或页面的插件时 该函数会被激活 工作完美并制作页面 如果 post type是 post 但如果 post type是 页面 那么它不起作用 不会创建页面 my post array p
  • Pandas 重置系列索引以删除多重索引

    我有一个看起来像这样的系列 1999 03 31 SOLD PRICE NaN 1999 06 30 SOLD PRICE NaN 1999 09 30 SOLD PRICE NaN 1999 12 31 SOLD PRICE 3 00 2
  • JavaFX 选项卡式窗格,每个选项卡上都有一个表格视图?

    我有一个选项卡式窗格 每个选项卡上都有一个表格 我向表中添加了不同的项目 我只希望每个选项卡向我显示该表的相应项目 但什么也没有出现 当我调试时 我可以清楚地看到选项卡窗格 其中包含选项卡 包含表视图 包含正确的项目 为什么这不起作用 Th
  • 如何为 android ndk 安装 libiconv?

    有人可以教我或给我指点如何为 Android 安装 libiconv 的教程吗 我已经用谷歌搜索了三天 但找不到教程或操作方法 获取 libiconv 源代码 并创建 Android mk makefile 看着这个网站 http grou
  • Drools 中类型不安全的对象字段访问

    我正在使用一个系统 其中插入 Drools 引擎的一些数据遵循以下 严重过度简化 格式 public class Item public String getValueType public Object getValue 这些值可能有几种
  • R 快速 XML 解析

    当前在 R 中将 XML 文件转换为数据帧的最快方法是什么 XML 如下所示 注意 并非所有行都包含所有字段