给定以下数据格式:
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
有没有办法修改聚合
函数?或者是否有一种优雅的方式来首先预处理我的数据?
最佳答案
也许你可以传递一个自定义函数来搜索你提到的条件(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/