我有一个包含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,点)中的错误: 评估错误:缺少参数“是”,没有默认值。 我该如何解决呢?
答案 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