我有以下类型的大型矢量:
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(以创建间隙)。然后将第二组的最后数量添加到第三个pus 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)
因此,组1加上2的最大值(加值)被添加到每个组2的值中,组2的最终新最大值将被添加到组3加上常数2,我需要继续前进,直到所有组都被覆盖。 怎么能实现这一目标? ........
答案 0 :(得分: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
(如您所见,我也更愿意使用列表)
答案 1 :(得分:1)
for(i in unique(grp)[-1])
{
myvec[which(grp==i)]=
2 +
myvec[which(grp==i)]+
max(myvec[which( grp==(i-1) )])
}