在R中如何删除包含负数的矩阵的所有列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中如何删除包含负数的矩阵的所有列?相关的知识,希望对你有一定的参考价值。

我想从包含至少一个负数的矩阵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]

以上是关于在R中如何删除包含负数的矩阵的所有列?的主要内容,如果未能解决你的问题,请参考以下文章