如何使用dplyr

时间:2018-09-05 08:05:46

标签: r dplyr

我有一个包含3列的数据框:会话ID,项目ID和类。在类别列中,0代表“未购买”,1代表“已购买”。

> data
    session id        item id   class
      1                 1         0
      1                 1         0
      1                 1         0
      2                 1         1
      2                 2         0
      3                 1         0
      3                 0         1
      3                 3         1
      3                 2         0

我想为每个唯一的会话ID计算不同项目的平均购买次数。在SessionID 1中仅包含一个唯一商品和0个购买,因此平均值为0/1 = 0,会话ID 2在1个商品中包含1个购买和2个唯一商品,因此avg将为1/2 = 0.5,并且会话ID 3中包含2个商品和4个独立商品因此平均值为2/4 = 0.5。结果将如下所示:

>  result   
session id       avg
   1             0/1=0
   2             0.5
   3             0.5

到目前为止,我已经尝试过:

data %>% 
   group_by(session_id) %>% 
   summarise(avg = ifelse(length(Class==1))/length(unique(item_id)))

但出现错误:

  

summarise_impl(.data,点)中的错误:         评估错误:缺少参数“是”,没有默认值。   我该如何解决呢?

1 个答案:

答案 0 :(得分:2)

我们可以使用sum来计算总计purchase,并使用n_distinct来获得唯一的item_id

library(dplyr)
df %>%
  group_by(session_id) %>%
  summarise(avg = sum(class)/n_distinct(item_id))

#   session_id   avg
#       <int> <dbl>
#1          1   0  
#2          2   0.5
#3          3   0.5