使用重新采样调整矢量大小

时间:2014-06-11 12:17:35

标签: r vector resize resampling

我有以下问题,这不完全是一个编程问题但我希望有一个编程的解决方案。我正在使用R.

考虑以下向量

v <- c(2,3,6,1)

我希望将其调整为任意大小,但sum(v)应保持不变。实际上,我想拉伸矢量。例如,通过因子2:

v2 <- c(1,1,1.5,1.5,3,3,0.5,0.5)

当新矢量是旧矢量的倍数时,我们可以分割元素。但是,它也适用于其他尺寸,这些尺寸不是原始矢量尺寸的倍数,例如: 150。

我想我可以使用像线性插值这样的东西,但我现在想不出一个简单的解决方案。

2 个答案:

答案 0 :(得分:3)

好的,刚刚找到了解决方案。我是R和数学的新手;)

v <- seq(1,10)

通过插值来调整矢量大小:

v2 <- approx(v, n=33)$y

接下来,我们将标准化以保持总和:

norm <- sum(v)/sum(v2)
v3 <- v2 * norm

在这个例子中,v3将是

 [1] 0.3030303 0.3882576 0.4734848 0.5587121 0.6439394 0.7291667 0.8143939
 [8] 0.8996212 0.9848485 1.0700758 1.1553030 1.2405303 1.3257576 1.4109848
 [15] 1.4962121 1.5814394 1.6666667 1.7518939 1.8371212 1.9223485 2.0075758
 [22] 2.0928030 2.1780303 2.2632576 2.3484848 2.4337121 2.5189394 2.6041667
 [29] 2.6893939 2.7746212 2.8598485 2.9450758 3.0303030

答案 1 :(得分:0)

您可以使用rep功能执行此操作

rep(v,each=2)/2
  

回答:[1] 1.0 1.0 1.5 1.5 3.0 3.0 0.5 0.5