如何为因子变量的每个级别应用函数?

时间:2013-06-18 18:19:42

标签: r percentile r-factor

我有这样的功能:

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
...   ...

我已经试过了,但是这些都改变了数据集输出的结构。

1 个答案:

答案 0 :(得分:6)

看看? 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