我正在使用OpenDataKit的ODK收集来收集现场的调查数据。目前,我在谷歌云上使用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_note1
和A_note2
)以及不必要的组,因为它们之上的级别是唯一(A_group1
和A_group2
)。
我希望能做的是: 1.通过删除不必要的组来展平数据 2.将每个实例视为不同的数据行,并将我的实例中的信息堆叠在一起。
我知道这可能在一篇文章中提出的要求太多了,但我想把它放在那里以防有人已经付出艰苦的努力来弄清楚如何使这项工作。
谢谢弗朗西斯
答案 0 :(得分:1)
我知道这要晚4年了...
ruODK恰好解决了这个问题。 XML的名称,名称空间和属性的复杂性转化为R中的嵌套列表。
从问题的年龄来看,您必须一直在使用ODK Aggregate,而ODK Central已将其替换。 ODK Central实现了Aggregate的OpenRosa API,RESTful API和OData API端点。旁注:出色的交互式API文档是here-JavaRosa端点也应适用于ODK Aggregate。
要弄清楚如何在R中取消嵌套XML /嵌套列表,您可以:
tidyr::unnest_wider()
(v0.8.3.9000)展平嵌套列表。ruODK::odata_submission_parse
,它递归地应用tidyr::unnest_wider()
来平整嵌套列表。请注意,tidyr
使用的ruODK
函数是在您提出问题大约四年后才实施的,而ruODK
是在它们之上构建的。
希望这会有所帮助!
编辑HT @muntashir-al-arefin的作者,他创建了R包“ odk”。他的包裹与ruODK README中的其他类似包裹进行了比较。
答案 1 :(得分:-2)
如果您使用ODK进行调查并将数据收集到Google表格或任何XLSX表格,那么您可以将ODK框架(XLSForm
)与数据集转换为SPSS文件(sav
),使用R包ODK
。