【问题标题】:Order of Summarise Functions changes output in dplyr汇总函数的顺序更改 dplyr 中的输出
【发布时间】:2015-09-16 19:42:02
【问题描述】:

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

B

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

输出

     NoCoupon Coupon AvgCoupon
1        2      6         6

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    快速回答:在计算AvgCoupon之前重新定义Coupon。

    如何解决:不要重复使用 Coupon 名称。

    原因:

    在你的summarise 函数中,你重新定义了Coupon。 在示例 B 中,您首先要做的是

    Coupon = sum(Coupon>0)
    

    所以Coupon 现在是 6。

    mean(Coupon[Coupon&gt;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]))
    

    【讨论】:

    • 我知道这很容易我错过了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2017-03-19
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多