我想从另一个矩阵创建一个新矩阵但只包含不包含0的行,我该怎么做?
答案 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