2014-03-24 5 views
0

두 변수가 있습니다. 하나는 행렬 목록이고 다른 하나는 벡터 목록입니다.벡터 목록의 요소와 일치하는 행렬 목록에서 여러 요소 선택

명 : load("https://dl.dropboxusercontent.com/u/22681355/a.Rdata")

매트 : load("https://dl.dropboxusercontent.com/u/22681355/b.Rdata")

내가 people의 요소에 따라 [[99]][[1]]에서 가서 mat의 행을 선택할 경우 mat 일치 people의 첫 번째 열 두 번째를 반환하고 싶은

mat의 열.

내가 시도 :

lapply(seq_along(people), function(i) mat[mat[,1,i] == 
    people[i], 2, i]) 

그러나이 다른 경우에는 2 개 또는 세 개의 일치하는 항목이 될 수 있지만 때로는 단지 1 일치하는 항목이 있다는 사실을 처리 할 수 ​​없습니다.

누군가 내 코드를 수정하는 데 도움을 줄 수 있습니까?

작은 예 :

사람 :

[[1]] 
[1] 34 56 7 
[[2]] 
[1] 13 93 
[[3]] 
[1] 42 

매트

,,1 
    [,1] [,2] [,3] 
[1,] 34 **2** 1 
[2,] 56 **2** 1 
[3,] 7 **2** 2 

,,2 
    [,1] [,2] [,3] 
[1,] 9 2 1 
[2,] 13 **2** 1 
[3,] 71 2 2 

,,3 
    [,1] [,2] [,3] 
[1,] 90 2 1 
[2,] 1 2 1 
[3,] 42 **2** 2 

출력은 다음과 같습니다

+0

링크를 사용하여 데이터에 액세스 할 수 없습니다. – user20650

+0

데이터의 _small_ 샘플을 채워주세요. – Henrik

+0

@ user20650 당신은 R에서 열 수 없거나 연결이 끊어 졌음을 의미합니까? 링크가 여기에서 작동합니다. – user1723765

답변

0

잘 모르겠어요이 당신이 원하는 것을 잡아 당겨 경우 . 귀하의 의견에서 mat [1], people [2]와 mat [,, 2] 등의 요소를 매칭하고 id가 일치하면 mat의 두 번째 열에 값을 반환합니다 .

나는 사람들과 매트 Rdata의 처음 세 값을 사용했다.

# Reduce problem 
# mat <- mat[,,1:3] 
#people <- people[1:3] 

# Data 
mat <- structure(c(82, 59, 6, 1, 1, 2, 1, 1, 2, 17, 51, 18, 1, 2, 1, 
       1, 2, 1, 31, 26, 40, 1, 1, 1, 1, 1, 1), .Dim = c(3L, 3L, 3L)) 

people <- list(6, 51, c(31, 26, 40)) 


l <- lapply(seq(people), function(x) { 
      lapply(people[x] , function(z) { 
        mat[,,x][,2][match(z, mat[,,x][,1])] 
     })}) 


#-------------------------------------------------------------------- 

# output 
R> mat 
, , 1 

    [,1] [,2] [,3] 
[1,] 82 1 1 
[2,] 59 1 1 
[3,] 6 2 2 

, , 2 

    [,1] [,2] [,3] 
[1,] 17 1 1 
[2,] 51 2 2 
[3,] 18 1 1 

, , 3 

    [,1] [,2] [,3] 
[1,] 31 1 1 
[2,] 26 1 1 
[3,] 40 1 1 

R> people 
[[1]] 
[1] 6 

[[2]] 
[1] 51 

[[3]] 
[1] 31 26 40 

R> l 
[[1]] 
[[1]][[1]] 
[1] 2 


[[2]] 
[[2]][[1]] 
[1] 2 


[[3]] 
[[3]][[1]] 
[1] 1 1 1