There are many occasions in my research when I want to create a within group index for a data frame. For example, with demographic data for siblings one might want to create a birth order index.
The below illustrates a simple example of how one can create such an index in R.
set.seed(123) # two families/groups 1 and 2 # with random ages data = data.frame(group = c(rep(1,5),rep(2,5)), age = rpois(10,10)) # birth order # use rank function with negative age for descending order data$bo = unlist(by(data, data$group, function(x) rank(-x$age, ties.method = "first")))
Another way to do this is with the new dplyr package:
library(dplyr)
data %.% group_by(group) %.% mutate(order=row_number(-age))
Nice one Kent.