我想按列将此函数应用于data.frame。随后,应从data.frame中删除生成了NA`s的所有行。
remove_outliers <- function(x, na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
#y <- y[!is.na(y)]
y
}发布于 2019-02-12 23:11:54
要使用IQR查找异常值,可以使用apply按列应用函数,将异常值替换为NA。通过使用它(),你可以找到“datavector”的索引位置--也就是你的列被堆叠了起来--并且通过模运算,你可以得到检测到NA的行号。要删除唯一值,只需在行上索引dataframe-c()。
X <- apply(X, MARGIN = 2, FUN = remove_outliers)
na_rows <- unique(which(is.na(X)) %% dim(X)[1])
X <- X[-na_rows, ]发布于 2019-02-12 23:14:22
https://stackoverflow.com/questions/54653121
复制相似问题