在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”列添加到矩阵中,包含每个相邻列中元素之间的差异值?