I\'m trying to calculate elapsed times in a data frame, where the \'start\' value for the elapsed time depends on the value of a factor column in the data frame. (To simply the
Here is a ddply solution
ddply(df, .(id), summarize, time = time, elapsed = seq(length(id))-1)
and one using rle instead
df$elapsed <- unlist(sapply(rle(as.numeric(df$id))$lengths, seq))-1
The 'ave' function is the first thing you should think of when the results is to be a vector with the same length as the number of rows in the dataframe:
df$elapsed <- ave(df$time, df$id, FUN=function(x) x -min(x) )
df
id time elapsed
1 a 1 0
2 a 2 1
3 a 3 2
4 b 4 0
5 b 5 1