识别r中的重复

时间:2018-06-19 00:17:46

标签: r dplyr repeat mutate

您好我有一个数据框,它看起来像这样:

Df

if var employee = company[com]?.department[department]?.employees[name] {
    employee.flag = True 
}

其中“年”是购买时间,“用户ID”是买方。

我想创建一个变量“RepeatedPurchase”,如果是重复购买则给出“1”,否则为0(如果是唯一购买/如果是第一次购买)。

因此,所需的输出将如下所示:

Df2

我试图通过首先创建一个变量“Se”来实现这一目的,该变量告诉该购买是第一次/第二次/第三次购买该购买者,但我的代码不起作用。想知道我的代码有什么问题,或者有更好的方法可以识别重复购买?谢谢!

if var employee = company[com]?.department[department]?.employees[name] {
    company[com]!.department[department]!.employees[name]!.flag = True 
}

3 个答案:

答案 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 UserIDPurchaseValue,然后使用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