Новый или постоянный клиент в R - PullRequest
4 голосов
/ 11 февраля 2020

У меня есть следующий набор данных, который уже отсортирован по транзакции:

dataset <- data.frame(id = c(1,2,3,4,2,4,6,7,3,2),
                      transaction = c(1,2,3,4,5,6,7,8,9,10),
                      amount = c(200,100,50,100,50,300,100,50,100,50))

Как видите, у каждого клиента есть Id и сумма, потраченная на транзакцию.

My Вопрос в том, как определить, является ли клиент новым в транзакции, или он повторяется. Новый клиент означает, что это его первая транзакция, а следующие являются повторяющимися.

recurrence_status <- c("new","new","new","new","recurrent",
"recurrent","new","new","recurrent","recurrent")

До сих пор я пробовал следующее:

for (i in 1:(length(dataset$transaction)-1)){
  for(j in 2:length(dataset$transaction)){
    j <- j + 1
    comp <- dataset[j:length(dataset$id)]
    ifelse((is.element(dataset[i,1]),comp),"recurrent","new")
  }
}

Но это дает мне ошибку из-за в скобках. Я знаю, что по возможности следует избегать использования циклов в R. Пожалуйста, любая помощь будет приветствоваться.

С уважением,

Ответы [ 2 ]

5 голосов
/ 11 февраля 2020

В base R это можно сделать с помощью duplicated

dataset$recurrence_status  <- c("new", "recurrent")[duplicated(dataset$id) + 1]
dataset$recurrence_status 
#[1] "new"       "new"       "new"       "new"       "recurrent" "recurrent" "new"       "new"       "recurrent"
#[10] "recurrent"
3 голосов
/ 11 февраля 2020

Использование dplyr:

dataset %>%
 group_by(id) %>%
 mutate(recurrence_status = factor(+(row_number() > 1), 
                                   levels = c(0, 1), 
                                   labels = c("new", "recurrent")))

      id transaction amount recurrence_status
   <dbl>       <dbl>  <dbl> <fct>            
 1     1           1    200 new              
 2     2           2    100 new              
 3     3           3     50 new              
 4     4           4    100 new              
 5     2           5     50 recurrent        
 6     4           6    300 recurrent        
 7     6           7    100 new              
 8     7           8     50 new              
 9     3           9    100 recurrent        
10     2          10     50 recurrent 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...