Add an index (or counter) to a dataframe by group in R
counter, indexing, plyr, r, seq
Solution
A `dplyr` solution is quite simple:
library(dplyr)
df %>% group_by(ProjectID) %>% mutate(counter = row_number(ProjectID))
# ProjectID Dist counter
#1 1 x 1
#2 1 y 2
#3 2 z 1
#4 2 x 2
#5 2 h 3
#6 1 k 3
Problem
I have a df like ``` ProjectID Dist 1 x 1 y 2 z 2 x 2 h 3 k .... .... ``` I want to add a third column such that we have an incrementing counter for each ProjectID: ``` ProjectID Dist counter 1 x 1 1 y 2 2 z 1 2 x 2 2 h 3 1 k 3 .... .... ``` I've had a look at `seq` `rank` and a couple of other bits particularly looking to see if I could use `ddply` to help: ``` df$counter <- ddply(df,.(projectID), function(x).....? ) ``` I think I could adapt this answer How to create a counter/numeration by group? but would prefer something using something like ddply (I can't find an equivalent of cumsum but I think that's the same principle here: Create ascending series of integers by group in Pandas ). That'd let me index occurrences in a list (and e.g. merge on this).