Я считаю, что нельзя делать это с рангом; вот пользовательская функция, которая будет делать то, что вы хотите, но она может быть слишком медленной, если ваши данные огромны:
Rank<-function(d) {
j<-unique(rev(sort(d)));
return(sapply(d,function(dd) which(dd==j)));
}
Более простой способ:
pop.rank <- as.numeric(factor(population))
Это отвечает на несколько другой вопрос, а именно, как отсортировать объект data.frame
на основе нескольких столбцов. Для этого вы можете использовать функцию sort_df
в пакете reshape
:
> library(reshape)
> sort_df(df,vars=c('date','population'))
idgeoville date population
3 4 1950 350
4 3 1950 350
2 8 1950 450
1 5 1950 500
8 8 2000 450
6 5 2000 500
7 8 2000 500
5 4 2000 650