7

このデータフレームを人口と日付で並べ替えようとしているので、order()andrank()関数を使用しています。

> df <- data.frame(idgeoville = c(5, 8, 4, 3, 4, 5, 8, 8),
                   date       = c(rep(1950, 4), rep(2000, 4)),
                   population = c(500, 450, 350, 350, 650, 500, 500, 450))
> df
   idgeoville date    population
1  5          1950     500
2  8          1950     450
3  4          1950     350
4  3          1950     350
5  4          2000     650
6  5          2000     500
7  8          2000     500
8  8          2000     450

ties.method = "first"問題はありませんが、最終的にこのデータフレームを作成しています。

   idgeoville date    population  rank
1  5          1950     500        1
2  8          1950     450        2
3  4          1950     350        3
4  3          1950     350        4
5  4          2000     650        1
6  5          2000     500        2
7  8          2000     500        3
8  8          2000     450        4

しかし実際には、次のように、同じ人口ランクに対して同じランクのデータフレームが必要です。

   idgeoville date    population  rank
1  5          1950     500        1
2  8          1950     450        2
3  4          1950     350        3
4  3          1950     350        3
5  4          2000     650        1
6  5          2000     500        2
7  8          2000     500        2
8  8          2000     450        3

Rでこの問題を解決するにはどうすればよいですか?カスタムties.method()または別のRトリックで?

4

3 に答える 3

6

より簡単な方法:

pop.rank <- as.numeric(factor(population))
于 2010-07-09T05:34:15.497 に答える
4

ランクでそれを行うオプションはないと思います。これはあなたが望むことをするカスタム関数ですが、あなたのデータが巨大な場合は遅すぎるかもしれません:

Rank<-function(d) {
    j<-unique(rev(sort(d)));
    return(sapply(d,function(dd) which(dd==j)));
}
于 2010-07-07T20:57:44.737 に答える
1

これは、わずかに異なる質問、つまり、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
于 2010-07-08T13:10:59.557 に答える