首页 文章

有条件地计入dplyr

提问于
浏览
29

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

这就是数据的样子:

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”并总结“值”为“周”<= 2和<= 4(看看每个成员在第1-2周和第1-4周订购了多少 . 我目前的代码是:

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

我现在尝试在汇总中添加另外两个字段,count2和count4,它们将计算每个条件的实例数(周<= 2且周<= 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函数的一个小调整,但是我很难搞清楚它 .

3 回答

  • 3

    尝试

    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))
    
  • 41

    使用预览创意并保持一致:

    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])
    
        )
    
  • 8

    使用 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
    

相关问题