聚合组意味着忽略零

聚合组意味着忽略零

给定以下数据格式:

c1 c2 c3
A  B  100
A  B  200
A  C    0
A  C    0
D  E  550
D  E  700
D  F  100
D  F    0

我想在相同的 A 和 B 的组中获得 c3 的平均值。通过使用 R 的 aggregate 函数:
aggregate(c3~c1+c2, data=myData, FUN=mean)

我得到正确的子集均值表:
A  B  150
A  C    0
D  E  625
D  F   50

然而,如果有一个值和一个零,我想排除这种情况的平均计算。使第一个代码的最后两行;
D  F  100
D  F    0

应评估为:
D  F  100

有没有办法修改 aggregate 函数?或者有没有一种优雅的方式来预处理我的数据?

最佳答案

也许您可以传递一个自定义函数来搜索您提到的条件(x 包括零和非零值),如果满足,则在第一种情况下返回非零值的平均值,否则计算标准平均值为总是。

#prepare data
df <- data.frame(c1=c("A","A","A","A","D","D","D","D"),
           c2= c("B","B","C","C","E","E","F","F"),
           c3= c(100,200,0,0,550,700,100,0))

#aggregate
aggregate(c3~c1+c2, data=df, FUN=(function(x){ifelse(sum(x==0)>0 & sum(x !=0) >0, mean(x[x>0]), mean(x))}))
      c1 c2  c3
    1  A  B 150
    2  A  C   0
    3  D  E 625
    4  D  F 100

关于r - 聚合组意味着忽略零,除非 0 是唯一值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45998419/

10-12 20:29