我的数据框如下:
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)。
答案 0 :(得分:0)
您可以使用简单的for-loop
在30列上进行循环。在10.000行中,您不需要循环,因为它们是使用向量自动计算的。使用pmin
和pmax
来满足您的条件,即每个计算出的值不能大于“ 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)
希望这接近您想要的。