我有以下问题,这不完全是一个编程问题但我希望有一个编程的解决方案。我正在使用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。
我想我可以使用像线性插值这样的东西,但我现在想不出一个简单的解决方案。
答案 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