2012-01-08 19 views
1

私が地区と候補者の選挙結果のデータフレームを持っている場合は、Rの各地区の優勝者を見つけるための簡単な方法がありますか?すなわち、行ごとに、その最大値の両方の最大値列名を選択しているのですか?行のRデータフレームの各行の基準*と*の列を選択しますか?

District CandidateA CandidateB CandidateC 
1   702   467   35 
2   523   642   12 
... 

だから私は、行2の行1で702と642だけでなく、を選択したいと思いますが、また、1行目から「CandidateA」と「CandidateB」2.

私は聞いていますのよこれは学習の質問として、私が知っているようにPerlやRubyのような汎用スクリプト言語でこれを行うことができます。おそらくRはこれのためのツールではありませんが、そうであるように思われます。ありがとうございました。

答えて

5
d <- read.table(textConnection(
"District CandidateA CandidateB CandidateC 
1   702   467   35 
2   523   642   12"), 
header=TRUE)     

d2 <- d[,-1] ## drop district number 
data.frame(winner=names(d2)[apply(d2,1,which.max)], 
      votes=apply(d2,1,max)) 

結果:

 winner votes 
1 CandidateA 702 
2 CandidateB 642 

あなたはネクタイを心配する必要はありますか? ...意味私は、感謝に精通してると同じロジックを使用してします

+0

関係についての良い点、ありがとう – CodeEnthusiast

1

これがあまりにも乱雑でない場合は、forループを実行して、catを使用して結果を出力してみてください。だからあなたのdata.frameオブジェクトがxの場合:

for(i in 1:length(x$District)) { 
    row <- x[i,] 
    max_row <- max(row[2:length(row)]) 
    winner_row <- names(x)[which(row==max_row)] 
    cat(winner_row, max_row, "\n") 
} 
+0

彼らは違った関係を扱い、whichwhich.maxのヘルプを参照してください。 (。間違いなく私にRの構文を学ぶのに時間がかかるとしている)あなたがそれを減らすことができますので、ちょうどそれを試してみましたが、完璧に動作 – CodeEnthusiast

+1

ただ、4行目に、 'which'機能が冗長であることに気づい:' winner_row < - 名前(x)は[行== max_row] ' – oeo4b

+0

または' winner_row < - 地区番号がある場合は、これまであります場合は、問題を引き起こす可能性がありますwhich.max'名(X)[which.max(行)] '' –

関連する問題