Последовательная сумма столбца - PullRequest
2 голосов
/ 10 мая 2019

У меня есть приведенный ниже кадр данных:

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  

Как я могу сделать это с помощью цикла?

Тем не менее, каждое вычисленное значение не может быть больше, чем "final" и не меньше, чем "init"и должны быть округлены до этих значений (8000 и 0).

1 Ответ

0 голосов
/ 09 июля 2019

Вы можете сделать это loop по 30 столбцам с помощью простого for-loop. Более 10000 строк вам не нужно зацикливать, поскольку они вычисляются автоматически с использованием вектора. 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)

Надеюсь, это близко к тому, что вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...