如何在没有异常值的情况下计算平均值?

时间:2012-10-23 22:17:30

标签: r

我有两组数据,例如

> data.frame(group=rep(1:2,each=4),value=c(102,104,107,45,204,199,217,77))

  group value
1     1   102
2     1   104
3     1   107
4     1    45
5     2   204
6     2   199
7     2   217
8     2    77

并且我想获得没有异常值的两组的平均值(值为> 50的组1的平均值和值> 100的组的平均值)

1 个答案:

答案 0 :(得分:2)

获取数据:

test <- data.frame(group=rep(1:2,each=4),value=c(102,104,107,45,204,199,217,77))

使用byswitch

的相当可扩展的解决方案
by(test,test$group,
    function(x) {
        switch(
            x$group[1],
            #group 1
            mean(x$value[x$value > 50]),
            #group 2
            mean(x$value[x$value > 100])
        )
    }
)

结果:

test$group: 1
[1] 104.3333
------------------------------------------------------------ 
test$group: 2
[1] 206.6667