2014-06-11 42 views
2

我有以下问题,这不完全是一个编程问题,但我想为它编程一个解决方案。我使用R.使用重新采样调整矢量的大小

考虑以下向量

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

我希望它被调整到任意大小,但总和(五)应保持不变。实际上,我想要扩展矢量。例如,按因子2:

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

当新的向量是旧的向量的倍数时,我们可以将元素分开。然而,它也适用于不是原始矢量大小倍数的其他大小,例如150.

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

回答

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

无需加载'stats',因为它已经由装载默认。 – agstudy

0

y OU可以使用代表函数来执行此

rep(v,each=2)/2 

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

+0

这只适用于新矢量的长度是旧矢量长度的倍数。另外,这不能回答我的问题。我想“拉伸”矢量,而不是重复元素。 – mxm

+0

你是什么意思,“这只适用于新的矢量的长度是旧矢量长度的倍数”,是不是总是成倍数?你能举出一个具体的例子吗? – shecode

+0

在我的回答中,原始矢量的大小是10,而新矢量的大小是33. 33不是10的倍数,因为没有整数i,例如i * 10 = 33. Rep只把整数作为参数,我想通过任何种类的数字增加矢量的大小。 – mxm

相关问题