2016-06-20 2 views
0

값의 행렬과, 행렬의 각 행에 대해 액세스하고자하는 (하나의!) 열을 알려주는 벡터가 있다고 가정합니다. 어떻게 루프없이 이러한 값을 검색합니까?인덱스 벡터를 사용하여 행렬 서브 세트하기

데이터 : 지수

dta <- structure(c(0.02, 0.01, 0, 0.08, 0.18, 0.01, 0.12, 0, 0.03, 0, 
        0.95, 0.96, 0.94, 0.97, 0.98, 0.95, 0.99, 0.91, 0.96, 0.98, 
        0.98, 0.99, 1, 0.92, 0.82, 0.99, 0.88, 1, 0.97, 1, 
        0.05, 0.04, 0.06, 0.03, 0.02, 0.05, 0.01, 0.09, 0.04, 0.02), 
       .Dim = c(20L, 2L), .Dimnames = list(NULL, c("1", "2"))) 

벡터 :

idx <- c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) 

원하는 출력 :

0.98 
0.98 
0.99 
0.91 
0.82 
0.99 
0.88 
0.99 
0.96 
0.99 
0.95 
0.96 
0.94 
0.96 
0.97 
0.94 
0.98 
0.91 
0.96 
0.97 

배경 : e1071::cmeans 복귀 membership 모든 클러스터에있는 모든 점의 멤버쉽 값 가장 가능성이있는 클러스터 인 cluster 가장 가능성있는 클러스터의 멤버십 값 벡터가 클러스터 플롯의 투명한 색을 생성하고 싶습니다.

답변

3

나는 분명히 length(idx) == nrow(dta) 것을 어떻게 생각

dta <- structure(c(0.02, 0.01, 0, 0.08, 0.18, 0.01, 0.12, 0, 0.03, 0, 
        0.95, 0.96, 0.94, 0.97, 0.98, 0.95, 0.99, 0.91, 0.96, 0.98, 
        0.98, 0.99, 1, 0.92, 0.82, 0.99, 0.88, 1, 0.97, 1, 
        0.05, 0.04, 0.06, 0.03, 0.02, 0.05, 0.01, 0.09, 0.04, 0.02), 
        .Dim = c(20L, 2L), .Dimnames = list(NULL, c("1", "2"))) 

idx <- c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) 

dta[cbind(1:nrow(dta), idx)] 

에 대해. 그것들이 동일하지 않다면, R은 우리가 행을 가지고있는 것과 같은 양의 원소를 갖기 위해 idx를 필요한만큼 쌓을 것입니다. 당신이 idx의 마지막 요소를 생략 그렇다면 당신은 R 다시 idx[1]에서 시작하기 때문에 마지막 요소가 열 두 대신 중 하나를 선택됩니다

idx <- c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) 
dta[cbind(1:nrow(dta), idx)] 

[1] 0.98 0.99 1.00 0.92 0.82 0.99 0.88 1.00 0.97 1.00 0.95 0.96 0.94 0.97 0.98 0.95 0.99 0.91 0.96 0.02 

를 얻을.

+0

당신이 올바른지, 벡터는 매트릭스 같은 길이이다. – sebastianmm

0

또는 대안은 :

c(dta[which(idx==2),2], dta[which(idx==1),1]) 

# [1] 0.98 0.99 1.00 0.92 0.82 0.99 0.88 1.00 0.97 
# 1.00 0.95 0.96 0.94 0.97 0.98 0.95 0.99 0.91 0.96 0.98 
관련 문제