我有一个优惠券使用数据集,从0到任何正数。
我想使用dplyr来总结数据。
但是,我注意到总结函数的顺序会影响平均计算。当平均计算开始时,如下面的A所示,输出是正确的(所有非零优惠券的平均值为18.333)。
但是,当平均计算是最后一次时,就像在B中那样,输出是不正确的(它显示了所有非零优惠券的平均6)。有人能解释一下发生了什么事,以及我如何修复下面的B以给出正确的答案吗?
数据集
library(dplyr)
CouponDF <- data.frame(Coupon = c(0,0,10,10,20,40,20,10))一个
CouponDF %>%
summarise(
AvgCoupon = mean(Coupon[Coupon>0]),
NoCoupon = sum(Coupon==0),
Coupon = sum(Coupon>0)
)输出
AvgCoupon NoCoupon Coupon
1 18.33333 2 6B
CouponDF %>%
summarise(
NoCoupon = sum(Coupon==0),
Coupon = sum(Coupon>0),
AvgCoupon = mean(Coupon[Coupon>0]))输出
NoCoupon Coupon AvgCoupon
1 2 6 6发布于 2015-09-16 19:46:37
快速回答:在计算AvgCoupon之前重新定义Coupon的。
如何修复:不重用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]))https://stackoverflow.com/questions/32617324
复制相似问题