【发布时间】:2015-05-11 12:28:12
【问题描述】:
将热门商品列表视为
ids_of_popular_items <- c('12345678','87654321')
考虑一个数据框input_data 有两列session_id 和item_id。
session_id item_id
1 1806169 643078800
2 1806169 643078800
3 2116064 214840661
4 2116064 214840663
....
如图所示,会话2116064 有两个项目214840661 和214840661。
现在我想看看这两个项目在整个数据集input_data 中的受欢迎程度。那就是这些项目列表中的table()。因此,每个聚合会话现在将具有属于该会话的项目计数的排序列表。例如如果214840661 在input_data 中出现100 次,214840661 出现200 次,则会话2116064 的聚合值应该是一个向量(200, 100)。
session_id item_counts
1 1806169 (40)
2 2116064 (200, 100)
....
我想只考虑每个会话中ids_of_popular_items 中不存在的那些项目。
我使用aggregate 方法实现了这一点,如下所示(聚合允许为每个聚合记录返回一个列表):
all_popularity <- aggregate(input_data$item_id,
FUN = function(items) {(table(input_data_without_popular$item_id[input_data_without_popular$item_id %in% items]))},
by = list(yoochoose_predictors$session_id))
但由于数据集的规模很大(大约 200 万行),计算需要花费大量时间。
我使用data.table 进行简单聚合,它的工作速度要快得多。我想知道如何使用data.table 来实现这一点。
【问题讨论】:
标签: r data.table aggregate