rogramação funcional eficiente (usando mapply) em R para um problema processual "natural&quo

Um caso de uso comum em R (pelo menos para mim) é identificar observações em um quadro de dados que possuem alguma característica que depende dos valores em algum subconjunto de outras observaçõe

Para tornar isso mais concereto, suponha que eu tenha vários trabalhadores (indexados por WorkerId) que tenham uma "Iteração" associada:

    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))

e eu quero eventualmente subconjunto do quadro de dados para excluir a "última" iteração (criando um booleano "remove") para cada trabalhador. Eu posso escrever uma função para fazer isso:

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

mas isso fica muito lento à medida que o quadro de dados aumenta (provavelmente porque eu estou desnecessariamente calculando o máximo para cada observação

Minha pergunta é qual é a maneira mais eficiente (e idiomática) de fazer isso no estilo de programação funcional. É primeiro criar um dicionário de valores WorkerId to Max e depois usá-lo como parâmetro em outra função que opera em cada observação?

questionAnswers(5)

yourAnswerToTheQuestion