在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中如何删除包含负数的矩阵的所有列?的主要内容,如果未能解决你的问题,请参考以下文章

R - 给定一个矩阵和一个幂,生成多个矩阵,其中包含矩阵列的所有唯一组合

将“delta”列添加到矩阵中,包含每个相邻列中元素之间的差异值?

如何根据包含的字符串的一部分选择列,然后在 R 中删除部分列名? (列位置可能不同)

如何将矩阵转换为R中的列向量列表?

R:如何计算列中用逗号分隔的所有字符值?

如何删除使用片段管理器添加的所有片段?