Лучше в R использовать скользящий фильтр стандартного отклонения - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть такой кадр данных:

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", как способ сделать выше, который будет менее вычислительно дорогим?

...