【问题标题】:subtract every next column value from previous?从上一个中减去每个下一个列的值?
【发布时间】:2016-07-13 11:27:08
【问题描述】:

我有一个数据集,其中以某种方式将下一个奇异数据添加到一行的先前数据之上,并且对于每一列,这意味着, ID 为 1 的行是原始纯数据,但 ID 为 10 的行已将前 9 个数据集的数据添加到自身...

我现在想要的是获取每个不同项目的原始纯数据,这意味着对于每个 ID,我如何从 ID 10 中减去所有数据?我必须减去前一个的那些,对于 ID 9 等等......

我想在 SQL Server 或 Rapidminer 中执行此操作,我正在使用这些工具,知道吗? 这是一个示例:

ID  col1 col2 col3 
1    12   2     3
2    15   5     5
3    20   8     8

所以 ID 为 3 的项目的真正正确数据不是 20、8、8,而是 (20-15),(8-5),(8-5),所以它的 5,3,3... 对于除第一个以外的每个项目,从其前一个中减去后者..

1 12 2 3

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需结果。

标签: sql sql-server rapidminer


【解决方案1】:

lag series 操作符试试看,它肯定会工作!要获得此运算符,您应该从 RM 市场安装系列扩展。

此操作员的作用 - 他复制选定的属性并将示例集的每一行推送到一个点,因此 ID 为 1 的行获得 ID 为 2 的副本等(您也可以指定延迟的值)。之后,您可以使用Generate Attributes 从另一个值中减去一个值。

【讨论】:

    【解决方案2】:

    我认为lag() 是您问题的答案:

    select (case when id = 1 then col
                 else col - lag(col) over (order by id)
            end)
    

    但是,样本数据可以澄清问题。

    【讨论】:

      【解决方案3】:

      在RapidMiner 中,系列扩展中包含Differentiate 运算符(默认情况下未安装,需要从RapidMiner Marketplace 下载)。这可用于计算相邻示例中属性之间的差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多