2016-06-30 16 views

答えて

3

別の可能性:

mydf$v4 <- apply(mydf, 1, function(x) names(which.max(table(x)))) 

います:

> mydf 
    v1 v2 v3 v4 
1 pos neg pos pos 
2 pos pos pos pos 
3 neg neg neg neg 
4

として「間の勝者を持っている別の列を作成したいです勝者」過半数を意味し、次のように動作します:

df$v4 <- ifelse(rowMeans(df == "neg") > 0.5, "neg", "pos") 

df$v4 
[1] "pos" "pos" "neg" 

これはにrowMeansを使用しています「負」である各行の要素の割合を計算します。この結果は、ifelseに供給されます。ここで、割合が0.5より大きい場合、「neg」が戻されます。そうでない場合は、「pos」が戻されます。

列は文字でなければならないことに注意してください。だからこそ私は以下のas.is = TRUE引数を使用します。

データ

df <- read.table(header = TRUE, text = "v1 v2 v3 
pos neg pos 
pos pos pos 
neg neg neg", as.is = TRUE) 
+0

これは一般的な解決策ではありませんが、あなたは仮定しています。 2:各行には2つの値しかありません。 –

+0

一般性について何かを暗示することを意味するものではありません。 – lmo