当我在相同矩阵的列中找到超出给定限制的异常值时,我试图找出如何删除整行。所以我得到了一个带有标记列(B,C,D等)的数据集,我希望从中删除大于3个标准偏差的异常值。当发现异常值时,整行将被删除。完成一个列后,将对下一个列重复相同的过程。
我发现这篇文章:Removing matrix rows if values of a cloumn are outliers但是那里的代码会删除1.5个标准偏差以外的所有异常值,不在你自己的限制范围之外,对吗?
(对不起,如果这是一个基本问题,我对R来说比较新。我以前只用MatLab编码。)
答案 0 :(得分:0)
在这种情况下,您必须定义自己的函数来识别异常值。请尝试以下方法:
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的那些行。