我想删除数字大于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
提前致谢。
答案 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