2012-04-25 68 views
-1

我有大載體與以下類型:加成連續數間隔ř

myvec <- c(1,2,3,5, 0,1,2,5,8, 0,1,3, 0,2,3,8, 0,3,5) 

爲基的相應的矢量爲:

grp <- c(rep(1, 4), rep(2, 5), rep(3,3), rep(4, 4), rep(5, 3)) 

我需要添加數量的這種方式連續組的最後一個數字將被添加到第二組中的距離加上2(以創建間隙)。然後第二組的最後一個數字將被添加到第三膿液3以創建一個間隙。

從而新的向量將看起來像

 myvecnew <- c(1, 2, 3 ,5, # maximum 5 + 2 applied in group 2 

    5+0+2 = 7, 5+1+2 = 8, 5+2+2 = 9, 5+5+2 = 12, 8+5+2 = 15, # maximum 15 + 2 applied in group 3 

     0+15+2 = 17, 1+15+2 = 18, 3+15+2 = 20, # maximum 20 + 2 applied to group 4 

        0 + 20 + 2 = 22,..........and so on) 

因此MAX(值)組1的加2被添加到每2個值,第2組所得到的新的最大將被添加到組3加上常數2,我需要繼續前進,直到所有組都被覆蓋。 這是如何實現的? ........

+1

第二組不應該有長度5?即grp <-c(rep(1,4),rep(2,5),rep(3,3),rep(4,4),rep(5,3))。 – 2012-04-25 23:36:53

+1

我想這個問題的另一個錯誤是,當你到達myvecnew時,組2的最大值(8 + 5 + 2 = 15)被添加到組3中,但我沒有看到額外的'加上常數2'被添加。 @JohnCLK,請檢查這一點。 – 2012-04-25 23:39:32

+0

@JohnColby謝謝你的糾正......我糾正了他們......謝謝你理解我的意思 – jon 2012-04-26 00:50:36

回答

2

通過什麼我覺得閱讀是問題(見註釋),我相信你能實現你想要喜歡什麼2個錯誤:

grps = lapply(unique(grp), function(x) myvec[grp==x]) 
to.add = cumsum(sapply(grps, max) + 2) 

> c(grps[[1]], unlist(lapply(2:length(grps), function(x) grps[[x]] + to.add[x-1]))) 
[1] 1 2 3 5 7 8 9 12 15 17 18 20 22 24 25 30 32 35 37 

(如你可以看到,我也喜歡與列表一起工作)

+0

是的,你是對的......我糾正了錯誤,謝謝...... – jon 2012-04-26 01:05:10

1
for(i in unique(grp)[-1]) 
{ 
    myvec[which(grp==i)]= 
      2 + 
      myvec[which(grp==i)]+ 
      max(myvec[which(grp==(i-1))]) 
} 
+0

這給了我'1 2 3 5 6 7 8 11 14 16 17 19 22 24 25 30 34 37 39' ,在問題中與'myvecnew'不匹配:'1 2 3 5 7 8 9 12 ...' – 2012-04-25 23:41:14

+0

我糾正了它。 – Seth 2012-04-26 02:27:50