如何使用dplyr计算会话中不同项目的平均购买量

如何使用dplyr计算会话中不同项目的平均购买量,r,dplyr,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

我有一个包含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的不同项目的平均购买数量。在会话id 1中,仅包含一个唯一项目和0个购买,因此平均值为0/1=0,会话id 2包含1个购买和2个唯一项目,因此平均值为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)))
但我得到了一个错误:

总结内容中出错(.data,dots): 计算错误:缺少参数“是”,没有默认值。 我怎样才能解决这个问题


我们可以使用
sum
来计算总
purchase
n\u distinct
来获得唯一的
项目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
库(dplyr)
df%>%
分组人(会话id)%>%
总结(平均值=总和(类别)/n不同(项目id))
#会话id平均值
#        
#1          1   0  
#2          2   0.5
#3          3   0.5