0

これはおそらく非常に単純ですが、単純化するための正しい構文がありません。

与えられた行列で、ある入力パラメータよりも大きい最小値である 1 つの列のエントリを見つけます。次に、対応する行の別の列にエントリを返します。それほど複雑ではありません...動作するものを見つけましたが、より効率的なソリューションをいただければ幸いです。

このリンクを見つけました:条件に適合する最小値を見つけるためのより良い方法?

これは素晴らしい..しかし、最小のエントリを見つける方法では、対応する行で対応する値を見つけるために必要なインデックス情報が失われます。

列 2 が条件列で、列 1 が返したい列だとしましょう....現在、これを作成しました: (これは、行 2 が 1 未満の数値でいっぱいであるためのみ機能することに注意してください)。

matrix[which.max((matrix[,2]>threshhold)/matrix[,2]),1]

何かご意見は?私はおそらく、この効果を持ついくつかの迅速かつ簡単な機能があることを期待しています.それは私に紹介されたことがないだけです.

4

2 に答える 2

4

rmk's answer は、マトリックスから多くの情報を取得する基本的な方法を示しています。ただし、最小値 (しきい値を超える) をテストしている列がわかっている場合、その行で別の値を返したい場合は、おそらく次のようなものです。

incol<- df[,4] # select the column to search
outcol <- 2 # select the element of the found row you want to get
threshold <- 5
df[ rev(order(incol>threshold))[1] ,outcol]
于 2013-08-12T15:16:12.663 に答える
2

以下を試すことができます。言う、

df <- matrix(sample(1:35,35),7,5)
> df
     [,1] [,2] [,3] [,4] [,5]
[1,]   18   16   27   19   31
[2,]   24    1    7   12    5
[3,]   28   35   23    4    6
[4,]   33    3   25   26   15
[5,]   14   10   11   21   20
[6,]    9    2   32   17   13
[7,]   30    8   29   22   34

しきい値が 5 だとします。

apply(df,2,function(x){ x[x<5] <- max(x);which.min(x)})
[1] 6 7 2 2 2

対応する値:

[1]  9  8  7 12  5

これにより、元の列のインデックス付けに従って、しきい値よりも大きい各列の最小エントリのインデックスが得られます。

于 2013-08-12T14:26:57.643 に答える