顺序列总和

时间:2019-05-10 19:15:24

标签: r

我的数据框如下:

init = 0  
final = 8000  
out = 3000  
vals = c(rexp(10000, 0.0002))

我想添加具有上述变量列表的线性组合的列(30),如下所示:

col1 = init + vals(1,) - out  
col2 = col1 + vals(1,) - out  
...  
col30 = col29 + vals(1,) - out  

对所有10.000行执行此操作:

col1 = init + vals(n,) - out  
col2 = col1 + vals(n,) - out  
...  
col30 = col29 + vals(n,) - out  

我该如何循环?

仍然,每个计算出的值都不能大于“最终”且不能小于“ init”,并且应四舍五入为这些值(8000和0)。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的for-loop在30列上进行循环。在10.000行中,您不需要循环,因为它们是使用向量自动计算的。使用pminpmax来满足您的条件,即每个计算出的值不能大于“ final”且不能小于“ init”。 cbind将各列连接在一起。

init = 0  
final = 8000  
out = 3000  
vals = c(rexp(10000, 0.0002))

tt  <- pmin(final, pmax(init, init + vals - out))
vals  <- cbind(vals, tt)
for(i in 2:30) {
  tt  <- pmin(final, pmax(init, tt + vals[,1] - out))
  vals  <- cbind(vals, tt)
}
dimnames(vals)[[2]][2:31]  <- paste0("col", 1:30)

希望这接近您想要的。