我想将此函数按列应用于data.frame。随后,应从data.frame中删除所有生成NA的行。
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
}
答案 0 :(得分:0)
要使用IQR查找离群值,可以通过逐列应用apply来应用函数,以用NA替换离群值。 通过which(),您可以找到“数据向量”的索引位置(即您的列堆叠在一起),并通过取模得到在其中检测到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, ]
答案 1 :(得分:0)