【问题标题】:R: remove columns and rowsR:删除列和行
【发布时间】:2014-10-13 08:07:13
【问题描述】:

我有以下矩阵:

mat <- matrix(c(1,2,0,9,8,0,0,0,0),ncol = 3)

现在我想删除所有行和等于 0 且列和等于 0 的行和列。所以在这里我想返回:

1 2
9 8

我尝试使用rowSums(mat)==0 &amp;&amp; colSums(mat)==0,但找不到。

【问题讨论】:

  • 你为什么用adj而不是mat?你也应该使用&amp; 而不是&amp;&amp;
  • 好的,它适用于 &,谢谢!

标签: r matrix


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多