Tomando a maioria dos votos nas colunas da matriz em 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
Quero obter a maioria dos votos nas colunas de mymat
. Neste exemplo, os resultados maioria voto através das 5 colunas são: 1 -1 -1 1 1
.
Tentei ver as soluções de uma pergunta semelhante aqui , mas como as colunas em mymat
não têm nome, essas soluções não funcionaram para mim.
Respostas
akrun Aug 17 2020 at 22:41
Podemos usar a Mode
função daqui
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
e usar apply
com MARGIN
como 2 para aplicação de coluna a coluna a função
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
Ou usando asplit/sapply
sapply(asplit(mymat, 2), Mode)
NOTA: Ambas as soluções funcionam em um conjunto de dados geral e não apenas com base nos valores apresentados pelo 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
Se você tiver votação binária do tipo representado por seus dados de amostra, você pode usar sign()
e colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas