Solved it another way, without apply:
data2 <- data[order(data$state.region,-data$Population),]
cx <- as.numeric(data2$state.region)
data2$rank <- cumsum(rep(1,length(cx)))-match(cx,cx) + 1
all.equal(data2==data)
Bart
--
View this message in context:
http://r.789695.n4.nabble.com/Create-coun
Here are four solutions:
data <- cbind(state.region,as.data.frame(state.x77))[,1:2]
# ave
data2 <- data[order(data$state.region, -data$Population), ]
data2$rank <- ave(data2$Population, data2$state.region, FUN = seq_len))
# by
f <- function(x) cbind(x[order(-x$Population), ], rank = 1:nrow(x))
d
take a look at the by, ave, aggregate and apply functions, perhaps one suits
your needs
Bart
--
View this message in context:
http://r.789695.n4.nabble.com/Create-counter-variable-for-subsets-without-a-loop-tp2220663p2220925.html
Sent from the R help mailing list archive at Nabble.com.
___
3 matches
Mail list logo