我有一个表格矩阵,
mat <- matrix(1:25, 5,5)
如下所示:
现在,我需要在表单中转换此矩阵,如下所示:
也就是说,我想保留第2行和第4行的所有元素以及第2列和第4列,并用NA替换所有其他值。这只是解释问题的一个简单例子。我的实际矩阵大小约为2000 X 2000.非常感谢任何帮助。
答案 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