从匹配向量列表元素的矩阵列表中选择多个元素

时间:2014-03-24 12:48:54

标签: r list matrix

我有两个变量,一个是矩阵列表,另一个是矢量列表。

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

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

我想沿着[[1]]中的元素从[[99]]转到people并选择matmat的第一列匹配的行people并返回mat的第二列。

我试过了:

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

然而,这无法处理有时只有1个匹配条目的事实,而在其他情况下可能有2个或3个匹配条目。

有人可以帮忙修改我的代码吗?

小例子:

人:

[[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

输出结果为:

1 个答案:

答案 0 :(得分:0)

我不确定这是否会拉出你想要的东西。从你的评论我匹配人[1]与mat [,, 1]的元素,人[2]与mat [,, 2]等等,并返回mat的第二列中的值,如果有匹配

我已经使用了人们的前3个值并使用了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