将NA转换为R中矩阵的特定数组

时间:2017-09-13 17:57:29

标签: r

我有一个表格矩阵,

mat <- matrix(1:25, 5,5)

如下所示:

enter image description here

现在,我需要在表单中转换此矩阵,如下所示:

enter image description here

也就是说,我想保留第2行和第4行的所有元素以及第2列和第4列,并用NA替换所有其他值。这只是解释问题的一个简单例子。我的实际矩阵大小约为2000 X 2000.非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你的第一个和第二个矩阵是不同的,因为第一个和第二个矩阵被填充,因为R将填充矩阵(即列主要顺序)而第二个矩阵是行主要的。

假设您打算使用相同的矩阵,可以使用简单的矩阵运算来解决您的任务:

mat <- matrix(1:25, 5,5)
mat2 <- matrix(NA, 5,5)
mat2[c(2,4),] <- 1
mat2[,c(2,4)] <- 1
mat * mat2
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA    6   NA   16   NA
[2,]    2    7   12   17   22
[3,]   NA    8   NA   18   NA
[4,]    4    9   14   19   24
[5,]   NA   10   NA   20   NA

如果没有,只需将您的初始矩阵转换为t(mat),并按照与上述相同的方法。

答案 1 :(得分:0)

mat = t(mat)
replace(x = mat, which((matrix(row(mat) %in% c(2, 4), NROW(mat), NCOL(mat)) |
                              matrix(col(mat) %in% c(2, 4), NROW(mat), NCOL(mat))) == FALSE,
                              arr.ind = TRUE), NA)
#     [,1] [,2] [,3] [,4] [,5]
#[1,]   NA    2   NA    4   NA
#[2,]    6    7    8    9   10
#[3,]   NA   12   NA   14   NA
#[4,]   16   17   18   19   20
#[5,]   NA   22   NA   24   NA