我有一个导入到OpenRefine的电子表格。创建者按列对信息(记录)组进行编码。我需要将所有这些列组以及所有相关列都放入其自己的行中。
使用一个简化的示例,我将如何处理:
id foo1 foo2 foo3 bar1 bar2 bar3
1 4 6 a 7 9 b
2 5 5 a 8 8 b
3 6 4 a 9 7 b
对此:
id foobar1 foobar2 foobar3
1 4 6 a
1 7 9 b
2 5 5 a
2 8 8 b
3 6 4 a
3 9 7 b
我一直在尝试使用中间列的方法,但是有6组5列,而我目前陷入困境。
我找到了解决方案。步骤是:
答案 0 :(得分:0)
我认为您所描述的解决方案本质上是相同的,但可能有一些捷径可以避免所有步骤。
给出您要发布的示例数据:
forEach(row.columnNames,cn,if(cn.startsWith("foo"),cells[cn].value,null)).join("|")+"~"+forEach(row.columnNames,cn,if(cn.startsWith("bar"),cells[cn].value,null)).join("|")
这将导致您描述的输出-如果此时不需要原始列,则可以将其删除,或者(有时更快)使用自定义表格导出器导出具有重新配置的数据的前X列,然后将这些数据导入到新项目中。
您可以修改GREL来处理您拥有的确切列分组。在我的示例中,我使用了列命名来对值进行分组,但是,如果这不是您要处理的数据的真实性,则可以使用GREL,例如:
forEach(row.columnNames.slice(1,4),cn,cells[cn].value).join("|")+"~"+forEach(row.columnNames.slice(4,8),cn,cells[cn].value).join("|")
使用“切片”功能选择某些列,而不是使用列名的某些方面来选择它们。