根据R

时间:2016-07-21 20:34:17

标签: r matrix subset

我想删除数字大于6且小于-6的每一行。换句话说,如果一行至少有一个不在-6和6之间的数字,我希望删除该行。

作为一个可重复的例子,请考虑:

set.seed(0); mat <- matrix(sample(-7:7,24,replace=TRUE), ncol = 4)
mat
#     [,1] [,2] [,3] [,4]
#[1,]    6    6   -5    7
#[2,]   -4    7    3   -2
#[3,]   -2    2   -2    4
#[4,]    1    2    4    7
#[5,]    6   -7    0   -4
#[6,]   -4   -4    3    2

我想要

#     [,1] [,2] [,3] [,4]
#[1,]   -2    2   -2    4
#[2,]   -4   -4    3    2

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果矩阵为mat,您可以通过以下任意一种获得符合您要求的行ID:

id <- which(apply(mat, 1, function (x) all(abs(x) <= 6)))
id <- which(rowSums(abs(mat) > 6) < 1)

现在您提取/保留这些行以获得新矩阵:

new_mat <- mat[id, ]

示例

set.seed(0); mat <- matrix(sample(-7:7,24,replace=TRUE), ncol = 4)
mat
#     [,1] [,2] [,3] [,4]
#[1,]    6    6   -5    7
#[2,]   -4    7    3   -2
#[3,]   -2    2   -2    4
#[4,]    1    2    4    7
#[5,]    6   -7    0   -4
#[6,]   -4   -4    3    2

我的代码给出了:

new_mat
#     [,1] [,2] [,3] [,4]
#[1,]   -2    2   -2    4
#[2,]   -4   -4    3    2