【问题标题】:Conditionally Count in dplyr在 dplyr 中有条件地计数
【发布时间】:2015-07-06 10:49:35
【问题描述】:

我有一些会员订单数据,我想按订单周汇总。

这是数据的样子:

memberorders=data.frame(MemID=c('A','A','B','B','B','C','C','D'),
             week = c(1,2,1,4,5,1,4,1),
             value = c(10,20,10,10,2,5,30,3))

我正在使用 dplyr 到 group_by MemID 并总结 week<=2week<=4 的“价值”(查看每个成员在第 1-2 周和第 1-4 周订购了多少。我目前拥有的代码是:

MemberLTV <- memberorders %>%
group_by(MemID) %>%
summarize(
sum2 = sum(value[week<=2]),
sum4 = sum(value[week<=4]))

我现在尝试在汇总中添加另外两个字段 count2 和 count4,这将计算每个条件的实例数(week &lt;=2week &lt;=4)。

想要的输出是:

output  = data.frame(MemID = c('A','B','C','D'),
                 sum2 = c(30,10,5,3),
                 sum4 = c(30,20,35,3),
                 count2 = c(2,1,1,1),
                 count4 = c(2,2,2,1))

我猜这只是 sum 函数的一个小调整,但我无法弄清楚。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    试试

     library(dplyr)
     memberorders %>% 
            group_by(MemID) %>% 
            summarise(sum2= sum(value[week<=2]), sum4= sum(value[week <=4]), 
                      count2=sum(week<=2), count4= sum(week<=4))
    

    【讨论】:

      【解决方案2】:

      使用之前的想法并保持一致:

      library(tidyverse)
      
      MemberLTV_2 <- memberorders %>%
        group_by(MemID) %>%
          summarize(
            count2 = length(value[week<=2]),
            count4 = length(value[week<=4]),
            sum2 = sum(value[week<=2]),
            sum4 = sum(value[week<=4])
            )
      

      【讨论】:

        【解决方案3】:

        使用plyr 包可以做到

        ddply(memberorders,.(MemID),
                            summarise, 
                            val1 = sum(value[week<=2]), 
                            val2 = sum(value[week<=4]),
                            val3 = length(value[week<=2]),
                            val4 = length(value[week<=4]))
        
          MemID val1 val2 val3 val4
        1     A   30   30    2    2
        2     B   10   20    1    2
        3     C    5   35    1    2
        4     D    3    3    1    1
        

        【讨论】:

        • 感谢 Alexey。我正在寻找专门的 dplyr 解决方案,因此我不必加载另一个库,但我感谢您的回复。
        • value 是什么?
        猜你喜欢
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2016-04-10
        相关资源
        最近更新 更多