使用R:如果我有一个方阵,如果对角线上的值小于5,那么删除行和列的最简单(以及快速)方法是什么?例如
x1 x2 x3 x4
x1 13 15 12 25
x2 23 4 23 34
x3 21 11 1 11
x4 11 22 23 33
代码将删除第2行和第2列,以及第3行和第3列。我尝试执行(i in 1:nrow(Mx)),但删除行会更改总行数。
最终矩阵看起来像
x1 x4
x1 13 25
x4 11 33
答案 0 :(得分:5)
使用diag
功能以及与此<
和[
子集运算符的逻辑比较......
idx <- ! diag(m) < 5
m <- m[ idx , idx ]
e.g。
m
# x1 x2 x3 x4
#x1 13 15 12 25
#x2 23 4 23 34
#x3 21 11 1 11
#x4 11 22 23 33
idx <- ! diag(m) < 5
m <- m[ idx , idx ]
m
# x1 x4
#x1 13 25
#x4 11 33
答案 1 :(得分:0)
不是更优雅或最快的解决方案,但它有效
mat <- matrix(c(13, 23, 21, 11, 15, 4, 11, 22, 12, 23,
1, 23, 25, 34, 11, 33), nrow = 4)
ind <- which(diag(diag(mat)) > 5, arr.ind = TRUE)
mat[ind[,1], ind[,2]]
## [,1] [,2]
## [1,] 13 25
## [2,] 11 33