【问题标题】:Get rows which do not contain 0获取不包含 0 的行
【发布时间】:2011-10-31 22:43:50
【问题描述】:

我想从另一个矩阵创建一个新矩阵,但只包含不包含 0 的行,我该怎么做?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    这是一种更加矢量化的方式。

    x <- matrix(c(0,0,0,1,1,0,1,1,1,1), ncol = 2, byrow = TRUE)
    
    x[rowSums(x==0)==0,]
    

    【讨论】:

      【解决方案2】:

      我发现它可以很简单地完成

      x <- matrix(c(0,0,0,1,1,0,1,1,1,1), ncol = 2, byrow = TRUE)
      
      y <- cbind (x[which(x[,1]*x[,2] >0), 1:2]) 
      

      【讨论】:

      • 排除某些值小于0的情况。
      • 你有很多冗余代码。 x[x[,1]*x[,2] != 0, 1:2] 会这样做。但这很难推广到更大的矩阵
      【解决方案3】:

      我只是在拼凑其他人已经给出的好建议。我喜欢将其存储为函数并泛化为除 1 之外的值(包括分类值)的能力(也使用 select 参数进行正面或负面选择):

      v.omit <- function(dataframe, v = 0, select = "neg") {
          switch(select, 
              neg = dataframe[apply(dataframe, 1, function(y) !any(y %in% (v))), ],  
              pos = dataframe[apply(dataframe, 1, function(y) any(y %in% (v))), ])
      } 
      

      让我们试试吧。

      x <- matrix(c(0,0,0,1,1,0,1,1,1,1,NA,1), ncol = 2, byrow = TRUE)
      
      v.omit(x)
      v.omit(mtcars, 0)
      v.omit(mtcars, 1)
      v.omit(CO2, "chilled") 
      v.omit(mtcars, c(4,3))
      v.omit(CO2, c('Quebec', 'chilled'))
      v.omit(x, select="pos")
      v.omit(CO2, c('Quebec', 'chilled'), select="pos")
      v.omit(x, NA)
      v.omit(x, c(0, NA))
      

      请不要像其他人在我之前回答的那样将我的答案标记为正确的答案,这只是为了延长对话。感谢您的代码和问题。

      【讨论】:

        【解决方案4】:

        我确信有更好的方法,但这里有一种方法。我们将使用apply()all() 函数创建一个布尔向量来索引感兴趣的矩阵。

        x <- matrix(c(0,0,0,1,1,0,1,1,1,1), ncol = 2, byrow = TRUE)
        x
        > x
             [,1] [,2]
        [1,]    0    0
        [2,]    0    1
        [3,]    1    0
        [4,]    1    1
        [5,]    1    1
        > x[apply(x, 1, function(y) all(y > 0)) ,]
             [,1] [,2]
        [1,]    1    1
        [2,]    1    1
        

        【讨论】:

        • 排除小于 0 的可能性。
        • !any(y==0) 会处理矩阵中有负值​​的情况。
        • 你可以让这个更紧凑,我认为:x[apply(x&gt;0,1,all),](或x[apply(x!=0,1,all),]
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多