3

我正在使用 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_note1and A_note2)以及不必要的组,因为它们上面的级别是唯一的(A_group1and A_group2)。

我想做的是: 1. 通过删除不必要的组来展平数据 2. 将每个实例视为不同的数据行并将我的实例中的信息堆叠在一起。

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

谢谢,弗朗西斯

4

2 回答 2

1

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

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

从您提出问题的时间来看,您一定一直在使用ODK Aggregate,它正在被ODK Central取代。ODK Central 实现了 Aggregate 的OpenRosa API、RESTful API 以及 OData API 端点。旁注:很棒的交互式 API 文档在这里- JavaRosa 端点也应该适用于 ODK Aggregate。

要弄清楚如何在 R 中取消嵌套 XML / 嵌套列表,您可以:

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

希望这可以帮助!

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

于 2019-09-10T06:51:12.667 回答
-1

如果您在调查中使用 ODK 并将您的数据收集到谷歌表格或任何 XLSX 表格中,那么您可以使用 R 包XLSForm将带有数据集的 ODK 框架 () 转换为 SPSS 文件 ( ) 。savODK

于 2017-11-02T15:38:22.657 回答