【问题标题】:How to use the elements in one matrix to identify multiple elements in second matrix?如何使用一个矩阵中的元素来识别第二个矩阵中的多个元素?
【发布时间】:2019-12-24 02:52:29
【问题描述】:

我有两个矩阵。我需要根据参与者是否满足第一个矩阵中的条件来找到第二个矩阵中元素的系数 alpha。例如,对于第一个矩阵中为 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

【问题讨论】:

    标签: r matrix indexing


    【解决方案1】:

    我们可以先找出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
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多