Рассчитать прошедшие «времена», когда эталонное время зависит от фактора

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

df <- data.frame(id=gl(2, 3, 5, labels=c("a", "b")), time=1:5)

Я хотел бы вычислить истекшее время, вычитая минимальное время на каждом уровне фактора из каждого времени (хотя в этом примере я буду иметь дело только с числовыми значениями, а не со значениями времени). Поэтому я хотел бы разделить фрейм данных наidвычтите минимумy значение от каждого элемента вy столбец и возвращает вектор (или фрейм данных) с преобразованными значениями. Я хочу закончить с чем-то вроде:

> dfTrans
id  time  elapsed
a      1        0
a      2        1
a      3        2
b      4        0
b      5        1   

Похоже, идеальная задача для Plyr, но я не могу найти простое решение.

Лучшее, что я могу придумать, это

elapsed <- dlply(df, .(id), function(x) x$time - min(x$time))
elapsed_comb <- NA
for(i in 1:length(names(elapsed))) {
  elapsed_comb <- c(elapsed_comb, elapsed[[i]])
}
elapsed_comb <- elapsed_comb[-1]
df$elapsed <- elapsed_comb

Это не элегантно и кажется хрупким. Конечно, есть лучший способ?

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

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