我有一个矩阵,其中包含要创建的矩阵元素的列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
我们可以创建一个具有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))
我们也可以使用rep
创建行索引