【问题标题】:Running Count within groups in a dataframe [duplicate]在数据框中的组内运行计数 [重复]
【发布时间】:2015-08-10 01:44:03
【问题描述】:

我有一个在线购物平台的订单数据库。

我正在使用的表格如下所示,其中每一行对应一个客户/项目/日期。

OrderHistory <- data.frame(date=c("2015-02-01", "2015-03-01", "2015-04-01", "2015-03-01", "2015-04-01", "2015-05-01", "2015-05-01"), 
            customer=c("A","A","A","B","B","B","B"),
            item=c("Candy", "Coffee", "Coffee", "Candy", "Candy", "Candy", "Coffee" ))

我想要获得的是每个成员订购特定商品的次数的运行计数,以便我可以分析哪些商品是由同一客户重复订购的,哪些商品是一次性订购的。

输出看起来像

out <- data.frame(date=c("2015-02-01", "2015-03-01", "2015-04-01", "2015-03-01", "2015-04-01", "2015-05-01", "2015-05-01"), 
              member=c("A","A","A","B","B","B","B"),
              item=c("Candy", "Coffee", "Coffee", "Candy", "Candy", "Candy", "Coffee" ),
              count=c(1,1,2,1,2,3,1))

我喜欢 dplyr 解决方案,但我愿意接受任何建议!平台上的确切项目不断变化,因此解决方案必须是动态的才能解决这个问题。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我相信这应该会给你你想要的

    library(dplyr)
    OrderHistory %>%
        group_by(customer, item) %>%
        mutate(count = seq(n()))
    
    Source: local data frame [7 x 4]
    Groups: customer, item
    
            date customer   item count
    1 2015-02-01        A  Candy     1
    2 2015-03-01        A Coffee     1
    3 2015-04-01        A Coffee     2
    4 2015-03-01        B  Candy     1
    5 2015-04-01        B  Candy     2
    6 2015-05-01        B  Candy     3
    7 2015-05-01        B Coffee     1
    

    【讨论】:

    • 太棒了。这样一个优雅简单的解决方案。谢谢!
    【解决方案2】:

    你已经得到了你的“dplyr”答案,但是在 base R 中一个简单的方法是使用ave

    ave(rep(1, nrow(OrderHistory)), OrderHistory[-1], FUN = seq_along)
    # [1] 1 1 2 1 2 3 1
    

    您也可以使用我的“splitstackshape”包中的getanID

    library(splitstackshape)
    getanID(OrderHistory, c("customer", "item"))
    #          date customer   item .id
    # 1: 2015-02-01        A  Candy   1
    # 2: 2015-03-01        A Coffee   1
    # 3: 2015-04-01        A Coffee   2
    # 4: 2015-03-01        B  Candy   1
    # 5: 2015-04-01        B  Candy   2
    # 6: 2015-05-01        B  Candy   3
    # 7: 2015-05-01        B Coffee   1
    

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2018-07-09
      相关资源
      最近更新 更多