2017-11-15 7 views
-1

ランク関数について読んでいますが、それはTies.methodを持っています。このベクターでランク関数が期待される出力と不一致R

:C(2,3,4,4,5,6)、Matt Krauseが示唆したように:

平均各縛ら要素 "平均" ランクを割り当てます。したがってランクは1、2、3.5、3.5、5、6になります。

最初は「より早い」エントリを「勝ち」させるので、ランクは数字順になります(1,2,3,4,5縛ら要素最高ランクを取得する:あなたは1,2,3,3,5,6

最大は反対がない得るので、6)

は、最低ランクにあらゆる縛ら要素を割り当て(1,2,4,4,5,6)

ランダムは結び目をランダムに分割するので、(1,2,3,4,5,6)または(1,2,4,3,5,6)のいずれかが得られます。 (1,2,3,3-、、):

しかしは、私はこの出力を必要とします。そのために私は何ができますか?

出力を使用して、5つの列を持つ別の行列(X)を埋めたいとします。このインスタンスの最終的な出力は、(1,1,2,1,1)でなければなりません。つまり、3番目のアイテムが2つ、残りのアイテムが2つあります。

インスタンス1として(2,3,4,4,5,6)、インスタンス2として(2,3,3,3,2,2)が行列(X)にある場合、それらは変換される。

(1,1,2,1,1)

(2,3,1,0,0)

(行列の列の数(X)すべての数字が2から6の間であることを考慮すると、合計で5つの異なる値があることを意味します)。

この状況では、間違いなく

+0

初期ベクトル$(1、2、3、3、4、5)$とターゲットベクトル$(1、2、3、3、4、 5)$?彼らはお互いに酷く似ています〜 – user189035

+0

(2,3,3,3,4,2)は2 2を持っているので、結果(2,3,1,0,0)はなぜですか? – G5W

+1

データのソートされた値を単に集計しているようです。あなたがしていることは何でも、あなたの質問は「ランク」が「R」でどのように機能するかを尋ねるタイトルとは関係がないようです。出力の末尾に余分なゼロを除いて、 'R'の根底にある解決策は' table'関数を適用することです。 – whuber

答えて

1

あり、すべてのインスタンスの労働組合のユニークな値を計算するために、より効率的/短い方法は、おそらくですが、そうでない場合、これは@whuberはコメントで示唆されているようにほとんどです:

テストケース:

instances <- list(c(2,3,4,4,5,6),c(2,3,3,3,4,2)) 

ulevs <- sort(unique(Reduce(union,instances))) 
f <- function(x) { 
    table(factor(x,levels=ulevs)) 
} 

を適用し、行列に変換します。

唯一のトリッキーな部分はゼロが正しくカウントされていますように、必ず私たちはレベルの完全な範囲を持って作っています。

t(sapply(instances,f)) 
##  2 3 4 5 6 
## [1,] 1 1 2 1 1 
## [2,] 2 3 1 0 0 
+0

ありがとうございます。コードは2番目の部分でうまくいきましたが、ランク付けの提案はありますか?私の行列は実際には異なる長さの配列からセグメント化された行列です。 10分後のあなたのコードはまだ動作していません。私は420のユニークな値を持つインスタンス(シーケンス)が12000個しかありません。 – Hadij

+1

私は(コメント作成者と共に)あなたがランキングの意味を理解していません。私のコードはあなたが与えた問題の例を解決します。他のものが必要な場合は、必要なものに近い再現可能な例を構築する必要があります。 (独自の値が分かっている場合は、 'levels'引数に直接入れることができます) –

関連する問題