1

これは、1 人の顧客の顧客注文データがどのように見えるかです。

order_no customer_id  product amount  order_total
      23           1        A    100          100 
      24           1        A    100          300
      24           1        B    100          300
      24           1        C    100          300
      25           1        B    100          100
      26           1        A    100          200
      26           1        B    100          200

新しい列で各顧客の平均注文サイズを計算したいので、この顧客の場合、175 = (100 + 300 + 100 + 200) / 4 になります。

order_no customer_id  amount  order_total  avg_order_size
      23           1     100          100             175
      24           1     100          300             175
      24           1     100          300             175
      24           1     100          300             175
      25           1     100          100             175
      26           1     100          200             175
      26           1     100          200             175

私はこれのいくつかのバージョンを使用しようとしましたが、運がありません:

customer_stats <- data.table(customer_stats)[, avg_order_size := mean(order_total), by=list(order_no, customer_id)]

mean私が本当にする必要があるのは、各order_no から 1 行だけを選択するorder_no[1]ことby=(customer_id)です。これをワンステップで実行し、作成をスキップする方法があれば、order_totalそれはさらに良いことです。

4

3 に答える 3

0

これを行うことで作成を避けることができますorder_total

customer_stats[ , avg_order_size := sum(amount, na.rm=TRUE) / length(unique(order_no)), by=customer_id]

ただし、これがどれだけ速くなるかについては留保があります。

于 2013-07-08T07:26:51.753 に答える