Data alignment: skip 1 point gaps (insert interpolated value)

This commit is contained in:
Alexander Zobnin
2021-09-23 13:15:01 +03:00
parent 9133b0aaed
commit d46b9c9a91

View File

@@ -22,10 +22,20 @@ func (ts TimeSeries) Align(interval time.Duration) TimeSeries {
pointFrameTs = point.GetTimeFrame(interval)
if pointFrameTs.After(frameTs) {
pointsToAdd := make([]TimePoint, 0)
for frameTs.Before(pointFrameTs) {
alignedTs = append(alignedTs, TimePoint{Time: frameTs, Value: nil})
pointsToAdd = append(pointsToAdd, TimePoint{Time: frameTs, Value: nil})
frameTs = frameTs.Add(interval)
}
if len(pointsToAdd) > 1 {
alignedTs = append(alignedTs, pointsToAdd...)
} else if len(pointsToAdd) == 1 && i < ts.Len()-1 {
// In case of 1 point gap, insert interpolated value to prevent unnecessary gaps
interpolatedPoint := pointsToAdd[0]
pointValue := linearInterpolation(interpolatedPoint.Time, ts[i], ts[i+1])
interpolatedPoint.Value = &pointValue
alignedTs = append(alignedTs, interpolatedPoint)
}
}
alignedTs = append(alignedTs, TimePoint{Time: pointFrameTs, Value: point.Value})