-1

I have managed to add a column for ranking for my data frame

lowest.mortality.upper<-nrow(lowest.mortality)
## Add a ranking column
lowest.mortality$ranking<-c(1:lowest.mortality.upper)

However now I have to rank a bigger dataset based on another column state. So it would read

AK 1
AK 2
TX 1
TX 2
TX 3

I could use a for loop but thats so 1980's. I'm sure that subset or lapply should work but I can't figure out how

Thanks

1 Answers1

0

Seems like you want to add a sequence column by group. There are several options.

A base R solution using ave is

df1$indx <- with(df1, ave(seq_along(grp), grp, FUN=seq_along))

Or this can be done with getanID from splitstackshape

library(splitstackshape)
getanID(df1, 'grp')[]
#    grp .id
#1:  AK   1
#2:  AK   2
#3:  TX   1
#4:  TX   2
#5:  TX   3

Or

library(dplyr)
df1 %>%
   group_by(grp) %>%
   mutate(indx = row_number()) 

data

df1 <- structure(list(grp = c("AK", "AK", "TX", "TX", "TX")), .Names = 
"grp", class = "data.frame", row.names = c(NA, -5L))
Community
  • 1
  • 1
akrun
  • 874,273
  • 37
  • 540
  • 662