R:删除列和行

时间:2014-10-13 08:07:14

标签: r matrix

我有以下矩阵:

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,但我找不到它。

1 个答案:

答案 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