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

标签 r dataframe grouping aggregate

给定以下数据格式:

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/

相关文章:

mysql - 通过 SSH 连接到 R 中的 MySQL 数据库

python - 如何对 Pandas 的多索引进行分组?

excel - 数据透视表组跳过范围

r - 带有ggplot2的Excel图形

r - 如何在绘图中手动将线型分配给线条

r - 为什么对于常见数据集,这两种拟合方法(R Logistic 回归和 Beta 回归)的标准误差不同?

pandas - 如何使用 pandas 数据框计算列的平均脉冲计数?

R循环: Perform a Function for Every 3 Rows

模式中的 Javascript 正则表达式多组匹配

python - 从一个可迭代对象中一次产生多个对象?