【问题标题】:How can I calculate a time-weighted average in kdb?如何计算 kdb 中的时间加权平均值?
【发布时间】:2013-05-22 18:54:20
【问题描述】:

由于 wavg 函数,在 kdb 中计算加权平均值很容易。如何计算两个连续行时间之间的延迟并将这些值用作 wavg 的权重参数?

类似:

`date`ts xasc select date,ts,mytw:(next ts - ts) wavg mycolumnval from pmd where date=2013.05.22

next 在查询中给出以下行列,但我不知道如何减去两个 ts 值并在wavg 中使用它们。

更新 解决方案是使用括号:((next ts) - ts)。请注意,我不能使用deltas[ts]。这会产生不同的权重:

08:15:19.811    00:00:00.000
08:15:19.811    00:00:00.001
08:15:19.812    00:00:00.014
08:15:19.826    00:00:07.305
08:15:27.131    NULL

这是deltas[ts]

08:15:19.811    08:15:19.811
08:15:19.811    00:00:00.000
08:15:19.812    00:00:00.001
08:15:19.826    00:00:00.014
08:15:27.131    00:00:07.305

【问题讨论】:

  • 您能举一个您期望的输出示例吗?同样在您的计算中, (next ts - ts) 将从右到左进行评估,因此它只是零列表中的下一个。你应该在这里使用增量。

标签: kdb


【解决方案1】:

怎么样:

`date`ts xasc select date,ts,mytw:deltas[ts] wavg mycolumnval from pmd where date=2013.05.22

【讨论】:

  • 这个查询有问题:权重设置为(ts - prev ts)。我正在更新我的问题...
【解决方案2】:

需要在“下一个 ts”周围加上括号:

`date`ts xasc select date,ts,mytw:((next ts) - ts) wavg mycolumnval from pmd where date=2013.05.22

【讨论】:

    【解决方案3】:

    不应该是: datets xasc select date,ts,mytw: (1 _ deltas ts, 0Nv) wavg mycolumnval from pmd where date=2013.05.22.如果您的 ts 是日期时间,请使用 0Np

    【讨论】:

    • 我很确定你的版本不工作,我有我的查询使用反引号,他们工作正常。现在,如果有人愿意解释差异(如果有任何理由)......
    • 感谢您指出这一点。原因正是你已经想通了 (next - ts) vs (ts - prev)
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2010-10-04
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2017-01-06
    • 2014-12-20
    • 2021-11-24
    相关资源
    最近更新 更多