设置时间序列向量长度相等(resize/rescale 它们使用线性插值)
Set time series vectors lengths equal (resize/rescale them with use of linear interpolation)
我有大量的时间序列数据集,这些数据集表示为向量(没有可用的时间标签),由于测量过程中的一些错误,它们的长度(如 length()
显示的值)略有变化(~10% ) 但他们每个人都明确地描述了恰好两分钟的时间间隔。我想 rescale/resize 它们然后计算它们之间的一些统计数据(所以我需要等长的时间序列)。
我需要快速变化的方法,线性插值对我来说是完美的选择,因为速度更重要。
简单示例,将长度为 5 的向量重新缩放为长度为 10 的向量:
input <- 0:4 # should be rescaled/resized into :
output <- c(0, .444, .888, 1.333, 1.777, 2.222, 2.666, 3.111, 3.555, 4)
我认为最快的方法是创建矩阵 w
('w' 用于权重),其维度为:length(output) x length(input)
,所以 w %*% input gives output(as matrix object)
,如果它是最快的方法,如何有效地创建矩阵 w
?
我认为这就足够了:
resize <- function (input, len) approx(seq_along(input), input, n = len)$y
例如:
> resize(0:4, 10)
[1] 0.0000000 0.4444444 0.8888889 1.3333333 1.7777778 2.2222222 2.6666667 3.1111111 3.5555556 4.0000000
> resize( c(0, 3, 2, 1), 10)
[1] 0.000000 1.000000 2.000000 3.000000 2.666667 2.333333 2.000000 1.666667 1.333333 1.000000
我有大量的时间序列数据集,这些数据集表示为向量(没有可用的时间标签),由于测量过程中的一些错误,它们的长度(如 length()
显示的值)略有变化(~10% ) 但他们每个人都明确地描述了恰好两分钟的时间间隔。我想 rescale/resize 它们然后计算它们之间的一些统计数据(所以我需要等长的时间序列)。
我需要快速变化的方法,线性插值对我来说是完美的选择,因为速度更重要。
简单示例,将长度为 5 的向量重新缩放为长度为 10 的向量:
input <- 0:4 # should be rescaled/resized into :
output <- c(0, .444, .888, 1.333, 1.777, 2.222, 2.666, 3.111, 3.555, 4)
我认为最快的方法是创建矩阵 w
('w' 用于权重),其维度为:length(output) x length(input)
,所以 w %*% input gives output(as matrix object)
,如果它是最快的方法,如何有效地创建矩阵 w
?
我认为这就足够了:
resize <- function (input, len) approx(seq_along(input), input, n = len)$y
例如:
> resize(0:4, 10)
[1] 0.0000000 0.4444444 0.8888889 1.3333333 1.7777778 2.2222222 2.6666667 3.1111111 3.5555556 4.0000000
> resize( c(0, 3, 2, 1), 10)
[1] 0.000000 1.000000 2.000000 3.000000 2.666667 2.333333 2.000000 1.666667 1.333333 1.000000