R 中的新客户或老客户

Man*_*anu 4 r

我有以下数据集,已经按交易排序:

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))
Run Code Online (Sandbox Code Playgroud)

如您所见,每个客户都有一个 ID 和在交易中花费的金额。

我的问题是,如何确定客户是交易中的新客户还是经常性客户。新客户意味着这是它的第一笔交易,接下来的交易是经常性的。

recurrence_status <- c("new","new","new","new","recurrent",
"recurrent","new","new","recurrent","recurrent")
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了以下方法:

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")
  }
}
Run Code Online (Sandbox Code Playgroud)

但是由于括号,它给了我一个错误。我知道应该尽可能避免在 R 中使用循环。请,任何帮助将受到欢迎。

问候,

akr*_*run 6

在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"
Run Code Online (Sandbox Code Playgroud)