基于另一个矩阵创建的矩阵包含具有na值的元素的索引

问题描述 投票:1回答:2

我有一个矩阵,其中包含要创建的矩阵元素的列ide的索引

>  index
         [,1] [,2] [,3] 
    [1,]    1    NA   3    
    [2,]    1    2    NA    
    [3,]    1    3    NA    
    [4,]    1    3    5    
    [5,]    1    4    5    
    [6,]    2    NA   NA    
    [7,]    3    4    NA  

示例第一行的列ID为1,NA,3,将其设置为值1并忽略了NA

第二行的ID为1,2,NA的列设置为值1

现在我想创建以下矩阵:

     a1 a2 a3  a4 a5
[1,]  1  0  1  0  0
[2,]  1  1  0  0  0
[3,]  1  0  1  0  0
[4,]  1  0  1  0  1
[5,]  1  0  0  1  1  
[6,]  0  1  0  0  0
[7,]  0  0  1  1  0
r for-loop indexing lapply sapply
2个回答
1
投票

我们可以创建一个具有0的矩阵,其中行数与index相同,列数是index中的最大值。然后,我们可以使用row函数作为行索引,并使用index值作为列索引来创建行,列矩阵,并将其设置为1。

mat <- matrix(0, ncol = max(index, na.rm = TRUE), nrow = nrow(index))
mat[cbind(c(row(index)), c(index))] <- 1
mat

#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    0    1    0    0
#[2,]    1    1    0    0    0
#[3,]    1    0    1    0    0
#[4,]    1    0    1    0    1
#[5,]    1    0    0    1    1
#[6,]    0    1    0    0    0
#[7,]    0    0    1    1    0

数据

index <- structure(c(1, 1, 1, 1, 1, 2, 3, NA, 2, 3, 3, 4, NA, 4, 3, NA, 
         NA, 5, 5, NA, NA), .Dim = c(7L, 3L))

0
投票

我们也可以使用rep创建行索引

© www.soinside.com 2019 - 2024. All rights reserved.