如何使用一个矩阵中的元素来标识第二矩阵中的多个元素?

时间:2019-08-18 18:35:57

标签: r matrix indexing

我有两个矩阵。我需要根据参与者是否满足第一矩阵中的条件来找到第二矩阵中元素的系数α。例如,对于第一个矩阵中所有为1的元素:

[1,1]   #participant 1 in 2008

[3,1]   #participant 3 in 2008

[2,2]   #participant 2 in 2009

[3,2]   #participant 3 in 2009

我需要找到矩阵2中所有对应元素的系数alpha,在本示例中,需要找到以下所有元素的一个系数alpha:

[1,1:3]    #2008 elements for participant 1

[3,1:3]    #2008 elements for participant 3

[2,4:6]    #2009 elements for participant 2

[3,4:6]    #2009 elements for participant 3


my_vector_1<-c(1,2,1,4,1,1,7,8,2,4,5,6,10,11,2)

my_matrix_1<-matrix(data=my_vector_1, nrow=3, ncol=5)

my_matrix_1

colnames(my_matrix_1)<-c(paste0("Y", 2008:2012))

rownames(my_matrix_1)<-c(paste0("Participant", 1:3))

my_vector_2<-c(2,4,6,8,10,11,12,13,14,16,2,12,3,14,5,12,7,18,9,22,12,13,14,15,8,9,10)

my_matrix_2<-matrix(data=my_vector_2, nrow=3, ncol=9)

colnames(my_matrix_2)<-c("O2008", "Q2008", "R2008", "O2009", "Q2009", "R2009", "O2010", "Q2010", "R2010")

rownames(my_matrix_2)<-c(paste0("Participant", 1:3))

my_matrix_2

1 个答案:

答案 0 :(得分:0)

我们首先可以找出my_matrix_1 == 1处的所有行/列位置。使用行索引将my_matrix_2中的行作为子集,并操纵列索引从每行中获取3列。

n <- 3
mat <- which(my_matrix_1 == 1, arr.ind = TRUE)
t(apply(mat, 1, function(x) my_matrix_2[x[1], (n * (x[2] - 1) + 1) : (n * x[2])]))

#             [,1] [,2] [,3]
#Participant1    2    8   12
#Participant3    6   11   14
#Participant2    2   14    7
#Participant3   12    5   18