У меня есть такой кадр данных:
A<-seq(1,100)
B<- runif(100, 0.0, 1.0)
DF<-data.frame(A,B)
Я добавляю два разных выброса
DF[20,2]<-40
DF[45,2]<-90
Затем у меня есть цикл for, который применяет скользящий фильтр стандартного отклонения, чтобы отброситьвсе значения выше или ниже 3-кратного стандартного отклонения от среднего значения (удаление выбросов)
for(i in seq(11,nrow(DF)-11)){
myValue<-DF[i,'B']
#Take avarge of 20 row window (10 before and 10 after)
myAvg<-mean(DF[i-10:i+10,'B'],na.rm=T)
mySD<-sd(DF[i-10:i+10,'B'],na.rm=T)
if(myValue < myAvg - 3*mySD | myValue > myAvg + 3*mySD){
DF[i,'B']<-NA
}
}
DF<-DF[!is.na(DF$B),]
Это работает нормально, но для большого набора данных для вычисления может потребоваться очень много времени.Есть ли более "R", как способ сделать выше, который будет менее вычислительно дорогим?