草庐IT

xml - R:读取连接 XML 数据实例 (ODK)

coder 2024-07-03 原文

我正在使用 OpenDataKit 的 ODK collect 在现场收集调查数据。目前我正在使用 ODK 聚合在谷歌云上接受数据提交,然后再下载为 CSV 文件。整个过程有些令人沮丧,因为每一步都容易出错。相反,我希望能够将平板电脑中的数据直接读取到 R 中,并为每个级别的数据编译数据帧。

数据以 xml 格式保存为单个实例。现在我们有大约 2000 个不同的实例。当使用 XML 将单个实例读入 R 时,数据最终以以下方式查找:

  <A_note/>
  <A_group1>
    <A_note1/>
    <A_note2/>
    <A01>2</A01>
  </A_group1>
  <A_group1.5>
    <A02>901</A02>
    <A02a/>
  </A_group1.5>
  <A_group2>
    <A03>9</A03>
    <A03a/>
    <HH_key>9010</HH_key>
    <A04a/>
    <A06/>
    <A07/>
  </A_group2>
  <A_group3>
    <A04>9</A04>
    <A04a_note/>
    <A06_note/>
    <A07_note/>
    <A04a_int>840256790</A04a_int>
    <A05>2</A05>
    <A06a>Baixo Umbeluze, perto do rio Umbeluze.</A06a>
    <A07a>-26.057376459502194 32.33107993182396 15.271170877998825 4.0</A07a>

我们可以看到有很多没有任何信息的标签(例如A_note1A_note2)以及不需要的组,因为它们之上的级别是唯一的(A_group1A_group2)。

我希望能够做的是: 1.通过删除不必要的组来扁平化数据 2. 将每个实例视为不同的数据行,并将来 self 的实例的信息堆叠在一起。

我知道在一个帖子中提出这个问题可能太多了,但我想把它放在那里,以防有人已经付出了艰苦的努力来弄清楚如何使这项工作成功。

谢谢,弗朗西斯

最佳答案

我知道这已经晚了 4 年......

ruODK正是解决了这个问题。 XML 的名称、 namespace 和属性的复杂性转化为 R 中的嵌套列表。

根据您问题的年龄来判断,您一定一直在使用 ODK Aggregate , 被 ODK Central 取代. ODK Central 实现聚合的 OpenRosa API ,加上 RESTful API,加上 OData API 端点。旁注:出色的交互式 API 文档是 here - JavaRosa 端点也应该适用于 ODK 聚合。

要了解如何在 R 中取消嵌套 XML/嵌套列表,您可以:

请注意,ruODK 使用的 tidyr 功能已在您提出问题后大约四年实现,并且 ruODK 构建在它们之上.

希望这对您有所帮助!

编辑为 HT @muntashir-al-arefin谁编写了 R 包“odk”。他的包与 ruODK README 中的其他类似包进行了比较.

关于xml - R:读取连接 XML 数据实例 (ODK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505082/

有关xml - R:读取连接 XML 数据实例 (ODK)的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  5. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  6. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  7. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  8. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐