3

私はこのような機能を持っています:

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 で試しましたが、これらはすべてデータセット出力の構造を変更します。

4

1 に答える 1

7

を見て? 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
于 2013-06-18T18:30:23.507 に答える