我正在使用 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_note1和A_note2)以及不需要的组,因为它们之上的级别是唯一的(A_group1 和 A_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/嵌套列表,您可以:
tidyr::unnest_wider() (v0.8.3.9000) 来展平嵌套列表。ruODK::odata_submission_parse它递归地应用 tidyr::unnest_wider() 来展平嵌套列表。请注意,ruODK 使用的 tidyr 功能已在您提出问题后大约四年实现,并且 ruODK 构建在它们之上.
希望这对您有所帮助!
编辑为 HT @muntashir-al-arefin谁编写了 R 包“odk”。他的包与 ruODK README 中的其他类似包进行了比较.
关于xml - R:读取连接 XML 数据实例 (ODK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505082/
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我主要使用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
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如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
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在使用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].有没有一种方法可以
我使用的是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上找到一个类
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳