【问题标题】:Openrefine - Transpose rows into columns based on textOpenrefine - 根据文本将行转换为列
【发布时间】:2017-09-29 22:12:42
【问题描述】:

我收到了来自图书馆目录的数据转储,它以 .txt 格式输出。我已经能够将数据放入电子表格中,但它都在一个列中。我会将行转换为列。

这一列中的数据按以下顺序排列: 标题 文件类型 作者 日期

但在某些情况下,目录记录按顺序显示: 标题 文件类型 概要 作者 日期

因此,我无法根据行数将这些记录转换为列。

每个标题前面都有“描述”一词。这是整个数据集中的一个常规特征。

有没有办法使用 OpenRefine 根据列中的文本将行转换为列?要在包含“Description”的行之后转置 x 行,直到出现单词“Description”的下一个实例?

【问题讨论】:

  • 您能否提供一个最小的数据样本,我们可以直接将其导入 Open Refine 以进行一些测试?
  • 嗨@phillip。如果欧文的回答是对的,而且我认为是对的,你能接受吗?谢谢!

标签: openrefine


【解决方案1】:

我建议的方法是将您的行分组到 OpenRefine 的“记录”中 - 我的方法如下:

  • 将数据原样导入 OpenRefine
  • 使用 GREL value.startsWith("Description") 编写“自定义文本构面”
  • 选择此构面显示为“真”的行 - 这应该为您提供包含标题的所有行
  • 仍然应用此构面选择,使用“基于此列添加列”添加仅包含标题的新列
  • 将此新列移动到项目的开头(左侧)
  • 切换到“记录”模式

您现在应该看到与同一标题相关的每组行都有一个记录。您现在可以使用“加入多值单元格”选项将标题、文档类型、概要(如果存在)、作者和日期放入单个单元格中

现在使用“拆分为几列”来跨列拆分值

现在每个标题应该有一行。您仍然需要做一些工作,因为与没有大纲的行相比,有大纲的行中的数据将移动一个。为了解决这个问题,我建议在最后一列使用“空白刻面” - 最后一列中的非概要行应该为空,因为数据少一点。

然后您可以使用转换将值逐列移动(从空列开始,否则您将覆盖数据)。

希望一切都有意义。如果您按照 Ettore 的建议发布一些示例数据,那么我可以做一个屏幕投射来说明

欧文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多