r - 표시 - 매트랩 그래프 자르기




이진 지표 매트릭스에서 요소를 생성하는 방법은 무엇입니까? (4)

다음 5 개의 관측 세트에 대한 레벨 A , BC 의 2 진 표시기 매트릭스 인 다음 매트릭스 mat 가 있다고 가정 해보십시오.

mat <- matrix(c(1,0,0,
                1,0,0,
                0,1,0,
                0,1,0,
                0,0,1), ncol = 3, byrow = TRUE)
colnames(mat) <- LETTERS[1:3]

> mat
     A B C
[1,] 1 0 0
[2,] 1 0 0
[3,] 0 1 0
[4,] 0 1 0
[5,] 0 0 1

출력을 fac 정의와 같은 단일 요소로 변환하고 싶습니다.

> fac <- factor(rep(LETTERS[1:3], times = c(2,2,1)))
> fac
[1] A A B B C
Levels: A B C

mat 의 이름에서 레이블을 얻었지만 숫자 코드 세트 (예 : c(1,1,2,2,3) )가 원하는 출력으로 받아 들여질 수있는 경우 추가 점.


다음과 같이 사용할 수 있습니다.

lvls<-apply(mat, 1, function(currow){match(1, currow)})
fac<-factor(lvls, 1:3, labels=colnames(mat))

여기 또 다른 것이있다.

factor(rep(colnames(mat), colSums(mat)))

한 가지 방법은 행 번호로 이름을 복제하고 매트릭스로 직접 색인을 작성한 다음이를 factor 로 감싸서 레벨을 복원하는 것입니다.

factor(rep(colnames(mat), each = nrow(mat))[as.logical(mat)])
[1] A A B B C
Levels: A B C

이것이 model.matrix에서 온 경우, colnames 앞에 fac 가 붙어 있기 때문에 동일하게 작동하지만 여분의 텍스트는 제거해야합니다.

factor(gsub("^fac", "", rep(colnames(mat), each = nrow(mat))[as.logical(mat)]))

행렬 곱셈을 사용한 (그리고 지금까지 가장 짧은) 우아한 솔루션 :

as.factor(colnames(mat)[mat %*% 1:ncol(mat)])






r