Sumprize Functions的顺序改变了dplyr中的输出

时间:2015-09-16 19:42:03

标签: r dplyr

我有一个优惠券使用数据集,范围从0到任何正值。

我想使用dplyr来汇总数据。

但是,我注意到汇总函数的顺序会影响平均值计算。首次进行平均计算时,如下面的 A ,输出正确(所有非零优惠券的平均值为18.333)。

然而,当平均计算是最后一次时,如下面的 B 输出不正确(它显示所有非零优惠券的平均值为6)。任何人都可以解释发生了什么以及我如何修复下面的 B 以显示正确答案?

数据集

library(dplyr)
CouponDF <- data.frame(Coupon = c(0,0,10,10,20,40,20,10))

A

CouponDF %>%
    summarise(
    AvgCoupon = mean(Coupon[Coupon>0]),
    NoCoupon = sum(Coupon==0),
    Coupon = sum(Coupon>0)
    )

输出

   AvgCoupon NoCoupon Coupon
1  18.33333        2      6

CouponDF %>%
    summarise(
    NoCoupon = sum(Coupon==0),
    Coupon = sum(Coupon>0),
    AvgCoupon = mean(Coupon[Coupon>0]))

输出

     NoCoupon Coupon AvgCoupon
1        2      6         6

1 个答案:

答案 0 :(得分:3)

快速回答:在计算Coupon之前,您需要重新定义AvgCoupon

如何解决:请勿重复使用Coupon名称。

<强>为什么:

summarise函数中,您重新定义Coupon。 在示例 B 中,首先执行

Coupon = sum(Coupon>0)

所以Coupon现在是6。

mean(Coupon[Coupon>0]))现在导致6以及以下示例显示。

Coupon <- 6
mean(Coupon[Coupon>0]) #6

相反,您可以使用:

CouponDF %>%
    summarise(
    without_coupon = sum(Coupon==0),
    with_coupon = sum(Coupon>0),
    ave_coupon = mean(Coupon[Coupon>0]))