gpt4 book ai didi

r - 聚合组表示忽略零,除非 0 是唯一值

转载 作者:行者123 更新时间:2023-12-01 10:27:56 25 4
gpt4 key购买 nike

给定以下数据格式:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com