2017-01-21 2 views
1

나는 다음과 같은 행렬이 있습니다행 순서에 따라 상위 삼각형의 값을 추출

mat <- matrix(1:16, 4, 4) 

> mat 
    [,1] [,2] [,3] [,4] 
[1,] 1 5 9 13 
[2,] 2 6 10 14 
[3,] 3 7 11 15 
[4,] 4 8 12 16 

내가 (대각선없이) 위쪽 삼각형을 변환하고자하는 행의 순서 벡터하기를 : 나는 당신이하는 경우 :

> mat1<-as.vector(mat[upper.tri(mat)]) 
> mat1 
[1] 5 9 10 13 14 15 
I 행에 의해 벡터 (MAT1)를 좀하고 싶습니다

는 다음과 같은 순서 : 우리는 전치을하고걸릴 수 있습니다 5,9,13,10,14,15

+0

일부 대수 트릭과 일부 모호한 기능이 솔루션에 빌려. 'utMat <- upper.tri (mat); mat [utMat] [rank ((행 (매트) * utMat * Nrow (매트)) + (col (매트) * utMat)) [utMat])]'. – lmo

답변

3

t(mat)[lower.tri(t(mat))] 
#[1] 5 9 13 10 14 15 
2

당신도이 시도 할 수 있습니다 :

indices <- which(upper.tri(mat, diag=FALSE), arr.ind=TRUE) 
mat[indices[order(indices[,1]),]] 
# [1] 5 9 13 10 14 15 
+0

나는 downvote를 여기에서 이해하지 않는다. –

+0

내가 이해하지 못하는 이유를 설명하지 않고 많은 이전 사용자의 답변에서 계속 저의 투표를하는 사람은 거의 없습니다. @ Rich Scriven을 알아 줘서 고마워요 –

+1

나는 업 투표했습니다! @SandipanDey에 대한 답을 많이 주셔서 감사합니다! – Avi