0

例を使って自分自身を説明する方が簡単でしょう。リストsがあるとしましょう:

s <- list( c(5,3,4,3,6),c("A","B","C","D","E"))

s は、すべてのサブベクトルに対して常に同じ数のオブジェクトを持ちます。NA 値は使用できません。ベクトルにはさまざまなタイプが含まれています。

私が達成したいことは次のとおりです。

rank  v1   v2
1     3    "B"
2     3    "D"
3     4    "C"
4     5    "A"
5     6    "E"

基本的に、最初のベクトルに基づいて (昇順で) リストをソートし、次に (同点の場合) 語彙順序を使用して 2 番目のベクトルを調べます。C++ の世界では、オブジェクトの operator< を定義するだけで済みますが、私は R の初心者であり、アイデアが不足しています。

私が見つけた最善の戦略は、要素をループして、各カップルのランク値 (double) を計算することです (たとえば、3 つの "B" は最高のランクで、6 つの "E" は最低のランクになります)、結果を保存します。別のベクトルで並べ替えます。ただし、適切なランキング関数を見つけるのは難しい場合があり、一般化するのは簡単ではないため、このソリューションは優れたものではありません。

それはより良い方法でなければならないほど一般的な問題のように私には思えます。誰かが私を正しい方向に向けることができますか?

ご協力いただきありがとうございます。

4

1 に答える 1

4

使用order():

s <- data.frame(v1=c(5,3,4,3,6), v2=c("A","B","C","D","E"))
s[order(s$v1, s$v2), ]
  v1 v2
2  3  B
4  3  D
3  4  C
1  5  A
5  6  E

リストをデータ フレームに変換したことに注意してください。データ フレームはそれ自体がリスト (すべての要素が同じ長さ) であるため、これは問題になりません。

于 2012-10-17T09:50:41.143 に答える