我想从包含至少一个负数的矩阵M
中删除这些列。例如,如果
M = (1 0 0 1)
(1 -1 0 2)
(2 3 4 -3)
我希望M成为
M = (1 0)
(1 0)
(2 4)
如何输入M <- removeNegativeColumns(M)
代码?
简单的方法可能是使用sum为列value < 0 (-ve)
的条件。
# Data
M <- matrix(c(1,0,0,1,1, -1, 0, 2,2, 3, 4, -3), ncol = 4, byrow = T)
M[, !colSums(M < 0 )]
# [,1] [,2]
#[1,] 1 0
#[2,] 1 0
#[3,] 2 4
M <- matrix(c(1,0,0,1,1, -1, 0, 2,2, 3, 4, -3), ncol = 4, byrow = T)
M1<- apply(M, 2,function(i)
{
p<- any(i <0)==FALSE #(any(as.vector(i)) < 0)
p
})
M<- M[,M1]
removeNegativeColumns <- function(M) M[,apply(M>=0,2,all)]
removeNegativeColumns(M)
# [,1] [,2]
# [1,] 1 0
# [2,] 1 0
# [3,] 2 4
检查每行的最小值是否小于零,然后使用它来过滤矩阵:
filter <- apply(M, 2, function (x) min(x) < 0)
M <- M[,!filter]
编辑:根据Moody_Mudskipper,这是一个类似但优越(和正确)的方法:
filter <- apply(data, 2, function (x) any(x < 0))
data <- data[,!filter]