获取不包含0的行

时间:2011-10-31 22:43:50

标签: r matrix

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

4 个答案:

答案 0 :(得分:6)

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

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

x[rowSums(x==0)==0,]

答案 1 :(得分:1)

我发现它可以非常简单地完成

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]) 

答案 2 :(得分:1)

我只是将其他人已经给出的伟大建议拼凑在一起。我喜欢将其存储为函数并将其推广到除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))

请不要将我的答案标记为正确答案,因为其他人已在我面前回答,这只是为了扩展对话。感谢您的代码和问题。

答案 3 :(得分:0)

我确信有更好的方法,但这是一种方法。我们将使用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