我有以下矩阵:
mat <- matrix(c(1,2,0,9,8,0,0,0,0),ncol = 3)
现在我要删除所有rowum等于0且columnsum等于0的行和列。所以我想返回:
1 2
9 8
我试图使用rowSums(mat)==0 && colSums(mat)==0
,但我找不到它。
答案 0 :(得分:1)
如果要删除总和为0的所有行以及总和为0的所有列,
mat[!!rowSums(mat), !!colSums(mat)]
# [,1] [,2]
#[1,] 1 9
#[2,] 2 8
但是,如果你想删除两个条件满足的地方,即
mat1 <- matrix(c(1,2,0,0,9,8,0,0, 0,0,0,0, 4,6,0,0), ncol=4)
indx <- !(!rowSums(mat1) & !colSums(mat1))
mat1[indx,indx]
# [,1] [,2] [,3]
#[1,] 1 9 4
#[2,] 2 8 6
#[3,] 0 0 0
但是,这仅适用于方阵,例如:
mat2 <- matrix(c(1,2,0,0,9,8,0,0, 0,0,0,0), ncol=3)
rowSums(mat2)==0 & colSums(mat2)==0
# [1] FALSE FALSE TRUE FALSE
#Warning message:
#In rowSums(mat1) == 0 & colSums(mat1) == 0 :
#longer object length is not a multiple of shorter object length