2011-11-22 11 views
5

私は次のようなデータを持つデータフレームを持っている:pmaxインデックスのようなものがありますか?

date=strptime(c(20110101,20110102,20110103,20110104,20110105,20110106),'%Y%m%d') 
rate1=c(1,2,3,4,5,6) 
rate2=c(2,1,3,6,8,4) 
rate3=c(4,1,3,6,8,3) 
rate4=c(7,8,9,2,1,8) 
z=data.frame(date,rate1,rate2,rate3,rate4) 
z$max=pmax(rate1,rate2,rate3,rate4) 

はPMAX機能は、私はそのレコードの最大値を取得することができますが、私はそのレコードの最大値のインデックスを取得することができますどのように思っていました。

のz $ maxは7,8,9,6,8,8に等しくなる、私は5,5,5,3,3,5

を取得したいと思い、これは可能ですか?私はこれが何かのように思えるが、答えはどこにも見つからないことは分かっている。

答えて

3

ベースRで非常にシンプル:

z$wmax <- apply(z[, -c(1,6)],1, which.max) 

実はそれはあなたに私が最初の列を除外するが、それは簡単に1を追加することで解決することができますので、あなたが求めていたものより1少ないを与えます。

z$max_col_n <- apply(z[, -c(1,6)],1, which.max) +1 
+0

ありがとうございます。また、which.minと一緒に使えば有益でしょう! – thequerist

13

あなたはmax.col使用することができます

> z$max = max.col(z[2:5])+1 
> z 
     date rate1 rate2 rate3 rate4 max 
1 2011-01-01  1  2  4  7 5 
2 2011-01-02  2  1  1  8 5 
3 2011-01-03  3  3  3  9 5 
4 2011-01-04  4  6  6  2 3 
5 2011-01-05  5  8  8  1 3 
6 2011-01-06  6  4  3  8 5 

を私が思うあなたは、インデックスを望んでいますが、唯一のインデックスを見つけるために、あなたが持っているだろうので、あなたが欲しいものを見つけるために、そこに4つのベクターを用いると意味します1を加えてください。

+0

ありがとう、非常に簡単。 – thequerist

+2

その関数は引数 'ties.method = c(" random "、" first "、" last ")を持ち、デフォルトでは' random'メソッドを使用しているので、ドキュメントを忘れないでください。 – Galled

+0

はい、私はそれを見ましたが、それを指摘してくれてありがとう。 – thequerist

関連する問題