您好我有一个数据框,它看起来像这样:
if var employee = company[com]?.department[department]?.employees[name] {
employee.flag = True
}
其中“年”是购买时间,“用户ID”是买方。
我想创建一个变量“RepeatedPurchase”,如果是重复购买则给出“1”,否则为0(如果是唯一购买/如果是第一次购买)。
因此,所需的输出将如下所示:
我试图通过首先创建一个变量“Se”来实现这一目的,该变量告诉该购买是第一次/第二次/第三次购买该购买者,但我的代码不起作用。想知道我的代码有什么问题,或者有更好的方法可以识别重复购买?谢谢!
if var employee = company[com]?.department[department]?.employees[name] {
company[com]!.department[department]!.employees[name]!.flag = True
}
答案 0 :(得分:2)
我们可以从计算每个UserID的购买数量开始,并在超过1时分配1
test %>% group_by(UserID) %>% mutate(RepeatedPurchase = ifelse(1:n()>1, 1, 0))
# A tibble: 5 x 4
# Groups: UserID [3]
Year UserID PurchaseValue Repeatedpurchase
<fct> <dbl> <dbl> <dbl>
1 2015 1.00 1.00 0
2 2015 2.00 5.00 0
3 2016 1.00 3.00 1.00
4 2017 1.00 3.00 1.00
5 2018 3.00 5.00 0
答案 1 :(得分:2)
你不需要dplyr。您可以使用以下duplicated()
:
test=data.frame("Year" = c("2015","2015","2016","2017","2018"), "UserID" = c(1,2,1,1,3), "PurchaseValue" = c(1,5,3,3,5))
repeated<-duplicated(test$UserID)
# [1] FALSE FALSE TRUE TRUE FALSE
test$RepeatedPurchase<-ifelse(repeated==T,1,0)
test
# Year UserID PurchaseValue RepeatedPurchase
# 1 2015 1 1 0
# 2 2015 2 5 0
# 3 2016 1 3 1
# 4 2017 1 3 1
# 5 2018 3 5 0
干杯!,
答案 2 :(得分:2)
这是另一个dplyr
解决方案。我们可以group_by
UserID
和PurchaseValue
,然后使用as.integer(n() > 1)
来评估计数是否大于1.
library(dplyr)
test2 <- test %>%
group_by(UserID, PurchaseValue) %>%
mutate(RepeatedPurchase = as.integer(n() > 1)) %>%
ungroup()
test2
# # A tibble: 5 x 4
# Year UserID PurchaseValue RepeatedPurchase
# <fct> <dbl> <dbl> <int>
# 1 2015 1 1 0
# 2 2015 2 5 0
# 3 2016 1 3 1
# 4 2017 1 3 1
# 5 2018 3 5 0