Учитывая, сколько времени каждый из них бежал; рассчитать общее количество вещей, которые были запущены во времени? - PullRequest
3 голосов
/ 23 марта 2020

У меня есть несколько машин, которые начинают работать одновременно. У меня есть вектор чисел vec_num, показывающий, сколько единиц времени работала каждая машина с момента ее запуска (нулевых значений нет).

Я пытаюсь найти способ эффективно рассчитать, сколько машин было запущено во времени, создав вектор length(max(vec_num)), где каждый элемент представляет единицу времени, а его значение представляет, сколько машин работало. .

# For instance, take
vec_num <- c(1,1,4,3,1,10)

Идеальным выходным сигналом был бы вектор, сгенерированный из:

vec_num <- lapply(vec_num, function(x) {
  vec_zero <- rep(0, max(vec_num))
  vec_zero[1:x] <- 1
  return(vec_zero)
})

Reduce(`+`, vec_num)

>> 6 3 3 2 1 1 1 1 1 1

Когда 6 машин работали в первый блок времени, 3 машины работали во втором и третий, 2 на четвертом, и только одна машина работала на 10. Представьте себе первый индекс, представляющий, сколько машин было запущено в первую единицу времени, второй индекс - вторая единица времени, третий индекс - третий, и т. д. четвертый.

Однако этот способ неэффективен в вычислительном отношении и памяти и не масштабируется, когда сотни тысяч машин работают в течение нескольких тысяч единиц времени. Есть ли более эффективный способ go об этом вычислении?

Ответы [ 2 ]

4 голосов
/ 23 марта 2020

Вот вариант:

rev(cumsum(rev(tabulate(vec_num))))
#[1] 6 3 3 2 1 1 1 1 1 1
0 голосов
/ 23 марта 2020

Мы можем использовать sequence + table

as.integer(table(sequence(vec_num)))
#[1] 6 3 3 2 1 1 1 1 1 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...