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

의 열에 대해 과반수 투표를하고 싶습니다 mymat. 이 예에서 5 개 열에 대한 다수결 결과는 다음과 같습니다 1 -1 -1 1 1.

여기 에서 비슷한 질문의 솔루션을 살펴 보았지만 의 열 mymat이름이 지정되지 않았기 때문에 이러한 솔루션이 작동하지 않았습니다.

답변

akrun Aug 17 2020 at 22:41

여기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 Aug 17 2020 at 22:50

당신은 당신의 샘플 데이터를 사용할 수로 표현되는 형태의 진 투표가있는 경우 sign()colSums():

sign(colSums(mymat))
[1]  1 -1 -1  1  1