【问题标题】:Assign rows to category in Openrefine在 Openrefine 中将行分配给类别
【发布时间】:2016-09-07 06:58:59
【问题描述】:
我有一个这样的数据集,我正在寻找一种方法来根据我拥有的产品类型添加一个类别。
我可以搜索Apple + Orange 并将它们分配给名为Fruits 的类别,与Milk + Wine 类似,然后将它们分配给另一个名为Drinks 的类别吗?
| Item | Category |
|-------|----------|
| Apple | | <-- Fruits
| Orange| | <-- Fruits
| Milk | | <-- Drinks
| Wine | | <-- Drinks
或者更简单的方法:找到任何包含Milk 的行并将它们分配到类别Drinks?
【问题讨论】:
标签:
dataset
data-manipulation
openrefine
【解决方案1】:
这是您无需代码即可完成的事情。
-
Item 字段中每个值的过滤器或构面
- 在
Category 字段上创建构面
- 单击
Category 构面中空白值旁边的edit 按钮,然后键入要添加的类别。
- 编辑您的
Item 构面或过滤器以移至下一个类别并重复此过程,直到您对所有项目进行分类。
【解决方案2】:
正如 magdmartin 所说,您可以使用构面和编辑来做到这一点 - 他描述的解决方案可能是最简单的方法并且最不容易出错。但是,如果您更喜欢一步完成,您可以使用 GREL 测试 Item 单元格的内容,然后根据 Item 单元格的内容设置 Category 单元格中的值。
with(cells["Item"].value.toLowercase(),w,if(or(w=="orange",w=="apple"),"Fruits",if(or(w=="milk",w=="wine"),"Drinks","")))
这与上面 Ettore Rizza 给出的方法相同,但使用的是 GREL 而不是 Jython。
【解决方案3】:
magdmartin 和 Owen Stephens 给出了很好的答案。另一种使用 GREL 的简单方法:
- 从“项目”的选项下拉列表中选择
Edit column > Add column based on this column...
- 新列名称“类别”和表达式集中:
value.replace("Apple","Fruit").replace("Orange","Fruit").replace("Milk","Drink").replace("Wine","Drink")
你可以继续添加.replace("whatever food","whatever category") ad nauseum