我有一个优惠券使用数据集,范围从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
答案 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]))