8

次よりも効率的なクエリはありますか

DT[, list(length(unique(OrderNo)) ),customerID]

顧客 ID、注文番号、および製品ライン アイテムを含む LONG 形式のテーブルを調整します。つまり、顧客がそのトランザクションで複数のアイテムを購入した場合、同じ注文 ID を持つ重複する行が存在することになります。

ユニークな買い物をしようとしています。length()一意の番号だけを探して、重複を含む顧客 ID ごとにすべての注文 ID の数を示します。

ここから編集:

ここにいくつかのダミーコードがあります。理想的には、. を使用した最初のクエリからの出力を探しています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.
4

2 に答える 2

13

顧客ごとの一意の購入数を数えようとしている場合は、次を使用します

 DT[, .N, keyby=list(customerId, OrderNo)][, .N, by=customerId]
于 2013-10-24T01:33:27.030 に答える