在bacon.js中对齐时间序列

时间:2014-08-30 05:27:22

标签: bacon.js

我想使用Bacon将时间序列与不规则时间戳组合在一个EventStream中。每个事件将包含给定时间的每个时间序列的最后一个值。 这是一个例子

var ts1 = new Bacon.fromArray([
    [1,2],  //Each array is an event,i.e here timestamp is 1 and value is 2
    [2,3],
    [5,9]
    ])

var ts2 = new Bacon.fromArray([
    [4,2],
    [9,3],
    [12,9]
    ])

我想拥有的是这样的东西

var ts12 =[
    [1,2,undefined], //At time 1, only ts1 was defined
    [2,3,undefined],
    [4,3,2],         //at time 4, we take the last value of ts1 (3) and ts2 (2)
    [5,9,2],
    [9,9,3],
    [12,9,9],
]

我尝试使用Bacon.update实现它,但我没有走得太远。你会如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

我假设您的时间序列值以时间参数的顺序作为值到达。因此,在我的代码中更改为Bacon.later

var ts1 = new Bacon.mergeAll([
   Bacon.later(100, [1,2]),
   Bacon.later(200, [2,3]),
   Bacon.later(500, [5,9])
])

var ts2 = new Bacon.mergeAll([
   Bacon.later(400, [4,2]),
   Bacon.later(900, [9,3]),
   Bacon.later(1200, [12,9])
])

var ts12 = ts1.toProperty(null).combine(ts2.toProperty(null), function(v1, v2) {
    if(v1 && v2) {
        return [Math.max(v1[0], v2[0]), v1[1], v2[1]]
    } else if(v1) {
        return [v1[0], v1[1], undefined] 
    } else if(v2) {
        return [v2[0], undefined, v2[1]]
    }
}).changes()

ts12.log()

您可以使用此JSfiddle中的解决方案。