3

私はそのようなデータフレームを持っています

product_id view_count purchase_count
1           11         1   
2           20         3
3           5          2
...

これを、view_countでグループ化し、たとえば間隔のpurchase_countを合計するテーブルに変換したいと思います。

view_count_range total_purchase_count
0-10                 45
10-20                65

これらのview_count_rangesは固定サイズになります。このような範囲をグループ化する方法についての提案をいただければ幸いです。

4

2 に答える 2

2

Tyler の回答を拡張し、彼の example から始めると、次のdatようなクエリをdata.table.

> require(data.table)
> DT = as.data.table(dat)

> DT[, sum(purchase_count), by=cut(view_count,c(0,10,20))]
         cut V1
[1,] (10,20] 31
[2,]  (0,10] 39

それでおしまい。たった一行。書きやすい、読みやすい。

(10,20] グループが最初に配置されていることに注意してください。これは、デフォルトで、各グループがデータに最初に表示される順序が保持されるためです (view_countこのデータ セットでは最初のグループは 11 です)。代わりにグループを並べ替えるには、次のように変更bykeybyます。

> DT[, sum(purchase_count), keyby=cut(view_count,c(0,10,20))]
         cut V1
[1,]  (0,10] 39
[2,] (10,20] 31

結果列に名前を付けるには:

> DT[,list( purchase_count = sum(purchase_count) ),
     keyby=list( view_count_range = cut(view_count,c(0,10,20) ))]
     view_count_range purchase_count
[1,]           (0,10]             39
[2,]          (10,20]             31
于 2012-05-15T08:49:22.550 に答える