2014-06-11 74 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

相關問題