【问题标题】:Remove all rows based on a threshold in R根据 R 中的阈值删除所有行
【发布时间】:2016-07-21 20:34:16
【问题描述】:

我想删除数字大于 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

提前致谢。

【问题讨论】:

    标签: r matrix subset


    【解决方案1】:

    如果你的矩阵是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
    

    【讨论】:

    • 是的,你是对的。男孩,一个可重复的例子肯定会在这里派上用场!
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2015-04-26
    • 2020-03-09
    • 2015-03-28
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多