2013-06-18 69 views
2

我有這樣的功能:如何爲因子變量的每個級別應用函數?

remove_outliers<-function(x){ 
qnt<- quantile(x,probs=0.99) 
y<- x 
y[x>qnt]<- NA 
y} 

目的是去除處於數據的前1%(代替它們與NA值)離羣值。我如何在一個因子變量的層次上應用此功能?

例如,

與組A和B的原始數據集:

group share 
A  100 
A  50 
A  30 
A  10 
... ... 
B  100 
B  90 
B  80 
B  60 
... ... 

應該結束了這樣的:

group share 
A  NA 
A  50 
A  30 
A  10 
... ... 
B  NA 
B  90 
B  80 
B  60 
... ... 

我已經通過,tapply,sapply,但嘗試過這些都會改變數據集輸出的結構。

回答

5

看一看? ave,但這正是你正在尋找:

remove_outliers<-function(x){ 
    qnt<- quantile(x,probs=0.99) 
    x[ x>qnt ]<- NA 
    return(x) 
} 

# assuming your data.frame is called mdf 
mdf$fixed <- ave(mdf$share, mdf$group, FUN = remove_outliers) 

mdf 
    group share fixed 
1  A 100 NA 
2  A 50 50 
3  A 30 30 
4  A 10 10 
5  B 100 NA 
6  B 90 90 
7  B 80 80 
8  B 60 60 
+0

對不起,我沒有用大寫樂趣。謝謝! – kostia

相關問題