C'è una domanda più efficiente di quanto segueuso efficiente di R data.table e unico()
DT[, list(length(unique(OrderNo))),customerID]
per perfezionare un tavolo formato lungo con ID cliente di, numero d'ordine e gli elementi pubblicitari di prodotti, il che significa che non vi saranno le righe duplicate con lo stesso ID ordine se un cliente ha acquistato più di 1 articolo in quella transazione.
Cercando di elaborare gli acquisti unici. length()
fornisce un conteggio di tutti gli ID ordine per ID cliente compresi i duplicati, cercando solo il numero univoco.
Modifica da qui:
Ecco alcuni codici fittizi. Idealmente, quello che sto cercando è l'output della prima query utilizzando lo unique()
.
df <- data.frame(
customerID=as.factor(c(rep("A",3),rep("B",4))),
product=as.factor(c(rep("widget",2),rep("otherstuff",5))),
orderID=as.factor(c("xyz","xyz","abd","qwe","rty","yui","poi")),
OrderDate=as.Date(c("2013-07-01","2013-07-01","2013-07-03","2013-06-01","2013-06-02","2013-06-03","2013-07-01"))
)
DT.eg <- as.data.table(df)
#Gives unique order counts
DT.eg[, list(orderlength = length(unique(orderID))),customerID]
#Gives counts of all orders by customer
DT.eg[,.SD, keyby=list(orderID, customerID)][, .N, by=customerID]
^
|
This should be .N, not .SD ~ R.S.
@Ricardo, basta n fatto questo, sì, questo ha funzionato. Saluti. – digdeep