2

私は現在カットに苦労しています...これのための別の機能があるかどうかはわかりません。

値を持つ大きなテーブルと、しきい値を持つマトリックスまたはベクトルがあります。

しきい値 0.6、0.8、1.0、1.2、1.4 を含むマトリックスがあるとします。値 (つまり 0.9) がどのセクターに該当するかを調べたいとします。基本的には「等級」制度です。値 <= 0.6 は 5、<= 0.8、> 0.6 は 4 などを取得します。したがって、この値 (5、4、3 など) のみを結果のテーブルに書き込みたいと思います。

ここに私がこれまでに持っているコードがあります:

cut(1.2, breaks=c(0.6,0.8,1.0,1.2,1.4), labels(5,4,3,2,1))

しかし、これはまだ機能しません.ベクトルの長さが異なるというエラーが常に発生するため、そこに挿入する必要があるラベルの数が実際にはわかりません。ラベル パラメータがないと、まだ正しく動作しません。値が含まれているセグメントだけでなく、すべての異なるセグメントを出力します...

4

4 に答える 4

7

cut正しい関数である必要がありますが、間違ったことをしています。

まず、コードにタイプミスがあります。labels = c(...)が正しいバージョンになります。

次に、自分が何をしているのかを考えてみましょう: 間隔を作成します。幾つか?cutなしで試してみlabelsてください:

cut(1.2, breaks=c(0.6,0.8,1.0,1.2,1.4))
# [1] (1,1.2]
# Levels: (0.6,0.8] (0.8,1] (1,1.2] (1.2,1.4]

あなたがやっている方法で作成されたレベルは 4 つだけなので、4 つのラベルを提供する (またはブレークポイントを再定義する) だけで済みます。

于 2013-10-07T11:29:24.553 に答える
2

私はあなたが探していると思いますfindInterval

breaks <- c(0.6,0.8,1.0,1.2,1.4)
val <- c(0.7,1.1,1.35)
findInterval(val, breaks)
## [1] 1 3 4

結果のラベルが必要な場合は、 factor を使用できます。

labels <- factor(5:1)
labels[findInterval(val,breaks)]
##  [1] 5 3 2
##  Levels: 1 2 3 4 5
于 2013-10-07T11:30:00.940 に答える
2

findIntervalこの状況では十分に適しています

x <- c(0.6, 0.8, 1.0, 1.2, 1.4)
> findInterval(0.9, x)
[1] 2

これは、値がと0.9の間の 2 番目の区間にあることを意味します。詳細については、をご覧ください。0.81.0?findInterval

于 2013-10-07T11:30:17.633 に答える
0

Thx 申し訳ありませんが、R はまだ新しく、学習曲線は確かに非常に高くなっています。

問題は、<= 0.6 の任意の値が最高の評価を得て、1.4 を超える任意の値が最低になるということです。findInterval では常に >= だったので、成功しませんでした。しかし、私はあなたの助けを借りて次のように機能しました:

cut(1.2, breaks=c(0,0.6,0.8,1.0,1.2,1.4,100),labels=c(6,5,4,3,2,1))
于 2013-10-07T11:39:24.150 に答える