Производит вывод

ый вариант использования в R (по крайней мере, для меня) - идентификация наблюдений во фрейме данных, которые имеют некоторую характеристику, которая зависит от значений в некотором подмножестве других наблюдений.

Чтобы сделать это более конкретным, предположим, что у меня есть ряд работников (индексируемых по WorkerId), с которыми связана «Итерация»:

    raw <- data.frame(WorkerId=c(1,1,1,1,2,2,2,2,3,3,3,3),
              Iteration = c(1,2,3,4,1,2,3,4,1,2,3,4))

и я хочу в конечном итоге установить подмножество фрейма данных, чтобы исключить «последнюю» итерацию (путем создания логического «удаления») для каждого работника. Я могу написать функцию для этого:

raw$remove <- mapply(function(wid,iter){
                              iter==max(raw$Iteration[raw$WorkerId==wid])},
                 raw$WorkerId, raw$Iteration)

> raw$remove
  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE

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

Мой вопрос заключается в том, что является более эффективным (и идиоматическим) способом сделать это в стиле функционального программирования. Сначала создается словарь значений WorkerId to Max, а затем используется в качестве параметра в другой функции, которая работает с каждым наблюдением?

Ответы на вопрос(2)

Ваш ответ на вопрос