-2

我有两组数据,例如

> 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的第2组平均值)

4

1 回答 1

2

获取数据:

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

一个相当可扩展的解决方案,使用byand switch

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
于 2012-10-23T22:59:00.883 回答