【问题标题】:Removing matrix rows when outliers outside a given limit are found in columns当列中发现超出给定限制的异常值时删除矩阵行
【发布时间】:2016-06-08 02:17:14
【问题描述】:

当我在同一矩阵的列中找到一个超出给定限制的异常值时,我试图弄清楚如何删除整行。所以我得到了一个带有标记列(B、C、D 等)的数据集,我想从中删除大于 3 个标准差的异常值。当发现异常值时,将删除整行。完成一列后,对下一列重复相同的过程。

我找到了这篇文章:Removing matrix rows if values of a cloumn are outliers,但那里的代码删除了 1.5 个标准差之外的所有异常值,而不是超出你自己的限制,对吧?

(对不起,如果这是一个基本问题,我对 R 比较陌生。我以前只用 MatLab 编码过。)

【问题讨论】:

  • 在您所指的链接中,它不会删除 1.5sd,而是 1.5 * 四分位距。另外,您可能想阅读this

标签: r matrix outliers


【解决方案1】:

在这种情况下,您必须定义自己的函数来识别异常值。请尝试以下操作:

remove_outliers2 <- function(x, limit = 3) {
    mn <- mean(x, na.rm = T)
    out <- limit * sd(x, na.rm = T)
    x < (mn - out) | x > (mn + out)
}

此函数将返回一个与 x 具有相同维度的 TRUE 或 FALSE 向量。当元素是异常值时,它将返回 TRUE。

要将此函数应用于所有列,请执行以下操作:

apply(x,2,remove_outliers2,lim = 2)

然后继续删除那些包含 TRUE 的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多