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
의 열에 대해 과반수 투표를하고 싶습니다 mymat
. 이 예에서 5 개 열에 대한 다수결 결과는 다음과 같습니다 1 -1 -1 1 1
.
여기 에서 비슷한 질문의 솔루션을 살펴 보았지만 의 열 mymat
이름이 지정되지 않았기 때문에 이러한 솔루션이 작동하지 않았습니다.
답변
akrun
여기Mode
에서 기능을 사용할 수 있습니다
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
함수의 컬럼 단위 적용을 위해 as 2 apply
와 함께 사용MARGIN
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
또는 사용 asplit/sapply
sapply(asplit(mymat, 2), Mode)
참고 : 두 솔루션 모두 OP에 표시된 값을 기반으로하지 않고 일반 데이터 세트에서 작동합니다.
mymat2 <- cbind(c('A', 'B', 'A'), c('e', 'e', 'f'))
sapply(asplit(mymat2, 2), Mode)
1 27ϕ9
당신은 당신의 샘플 데이터를 사용할 수로 표현되는 형태의 진 투표가있는 경우 sign()
및 colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1