Prendre le vote majoritaire dans les colonnes de la matrice dans R
mymat <- structure(c(1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1
), .Dim = c(3L, 5L))
> mymat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 -1 -1 1 1
[2,] 1 -1 1 1 1
[3,] 1 -1 -1 1 -1
Je veux faire passer le vote majoritaire dans les colonnes de mymat
. Dans cet exemple, les résultats du vote à la majorité sur les 5 colonnes sont: 1 -1 -1 1 1
.
J'ai essayé d'examiner les solutions à partir d'une question similaire ici , mais comme les colonnes ne mymat
sont pas nommées, ces solutions n'ont pas fonctionné pour moi.
Réponses
Nous pouvons utiliser la Mode
fonction d' ici
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
et utiliser apply
avec MARGIN
as 2 pour une application par colonne de la fonction
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
Ou en utilisant asplit/sapply
sapply(asplit(mymat, 2), Mode)
REMARQUE: les deux solutions fonctionnent sur un ensemble de données général et pas seulement sur les valeurs affichées par l'OP
mymat2 <- cbind(c('A', 'B', 'A'), c('e', 'e', 'f'))
sapply(asplit(mymat2, 2), Mode)
Si vous avez un vote binaire du type représenté par vos exemples de données, vous pouvez utiliser sign()
et colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1