给定以下数据格式:
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/