Hola buenos días,

ahora mismo estaba haciendo una función para quitar outlier por condición.
Pero lo cierto es que aunque la función consigue quitarlos creo que me ha
quedad bastante farragoso. Os dejo el codigo y si me dais algún consejo
para mejorarlo mejor que mejor. Mcuhas gracias


#############################################################•
# Ojo este script puede instalarte librerias que no quieres

if(!require(ez)){
  install.packages("ez")
}
require(ez)
data(ANT)

ANT$Factor <-# Crear el factor para quitar los outliers
  interaction(ANT$cue, ANT$flank, ANT$location)

y <- ANT$rt # save original data
x <-  # save non outliers by condition
  by( data= ANT ,INDICES= ANT$Factor,FUN= function(x){
    print(x$Factor[1])

    if(length( x[ abs(scale(x$rt))> qnorm(0.975) & !is.na(x$rt) , ]$rt ) >
1){
      x[ abs(scale(x$rt))> qnorm(0.975) & !is.na(x$rt), ]$rt <- NA # Quita
los outliers que se van por encima de 2.5% en valor absoluto
      x$rt
    }else{
      x$rt
    }
  }
  )
x
for(i in levels(ANT$Factor)){
  ANT[ ANT$Factor == i,]$rt <-
    as.vector(x[[i]])
}

ANT$rt <- as.numeric(ANT$rt)
ANT$rtOriginal <- y

rm(x,y)


head(ANT, 15)

# El valor 14 es un otulier no muy extremo pero lo es.
--

	[[alternative HTML version deleted]]

