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

时间:2018-03-04 22:36:57

标签: r matrix dimensions identity-column

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

4 个答案:

答案 0 :(得分:6)

简单的方法可能是使用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

答案 1 :(得分:2)

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]

答案 2 :(得分:1)

<%= form_for @user, url: authenticate_index_path do |u| %>

答案 3 :(得分:0)

检查每行的最小值是否小于零,然后使用它来过滤矩阵:

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]