Tomando el voto de la mayoría en las columnas de la matriz en R
Aug 17 2020
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
Quiero obtener la mayoría de votos en las columnas de mymat
. En este ejemplo, los resultados mayoría de votos a través de las 5 columnas son: 1 -1 -1 1 1
.
Intenté buscar las soluciones de una pregunta similar aquí , pero como las columnas en no mymat
tienen nombre, estas soluciones no funcionaron para mí.
Respuestas
akrun Aug 17 2020 at 22:41
Podemos usar la Mode
función desde aquí
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
y utilizar apply
con MARGIN
como 2 para la aplicación por columnas de la función de
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
O usando asplit/sapply
sapply(asplit(mymat, 2), Mode)
NOTA: Ambas soluciones funcionan en un conjunto de datos general y no solo en función de los valores mostrados por el OP
mymat2 <- cbind(c('A', 'B', 'A'), c('e', 'e', 'f'))
sapply(asplit(mymat2, 2), Mode)
1 27ϕ9 Aug 17 2020 at 22:50
Si tiene una votación binaria del tipo representado por sus datos de muestra, puede usar sign()
y colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1