【发布时间】:2018-08-30 12:05:24
【问题描述】:
我有一个删除异常值detectaOutliers() 的函数,但不知何故我的函数并没有删除所有异常值。
谁能帮我找出错误?
detectaOutliers = function(x) {
q = quantile(x, probs = c(0.25, 0.75))
R = IQR(x)
OM1 = q[1] - (R * 1.5) # outliers moderados
OM3 = q[2] + (R * 1.5)
OE1 = q[1] - (R * 3) # outliers extremos
OE3 = q[2] + (R * 3)
moderados = ifelse(x < OM1 | x > OM3, 1, 0)
extremos = ifelse(x < OE1 | x > OE3, 1, 0)
cbind(extOut = moderados)
}
cepas = unique(AbsExtSin$Cepa)
concs = unique(AbsExtSin$Concen)
outliers = NULL
for (cepa in cepas) {
for (concen in concs) {
datosOE = subset(AbsExtSin, Cepa == cepa & Concen == concen)
outs = detectaOutliers(datosOE$Abs)
datosOE = cbind(datosOE, outs)
outliers = rbind(outliers, datosOE)
}
}
AbsExtSin = subset(outliers, extOut == 0)[, 1:5]
【问题讨论】:
-
我不明白出了什么问题,您的函数给出的异常值与
detOutliers = function(x) boxplot(x, plot = FALSE)$out相同。
标签: r function boxplot outliers