通过其他方法提高R中Sqldf运算符的效率



我正在处理一个数据集,该数据集具有一天级别的数据(一行代表一天),其中包含产品(正在广告中)的数据,这些数据取决于用户是否看到产品或是否正在采取行动。

在对R中的数据集进行分析之前,我想过滤数据,这样我就可以过滤掉所有看到产品的次数和采取行动的次数之差为2,视图为3的日子。我能够通过R中的SQL语句做到这一点-首先,我使用sqldf包过滤掉所需的天数,如:

 filterd_days = sqldf(select day, count(views) as seen, count(action) 
as actions from subset_data group by day  
having (count(views) - count(action) = 2) and count(views) = 3)

然后,我将这个数据集(SQL的o/p)与原始数据集连接起来,以过滤具有所需日期的原始数据集。

data_new = data[data$day %in% filter_days$day,]

但每个数据集的执行需要近5分钟的时间,因为它需要每天运行,所以想知道是否有更快的方法来执行此操作并获得相同的o/p。

尝试使用data.table而不是data.frame

假设:

我假设数据集如下所示:

>t
          day views action
1: 01/01/2010     1      1
2: 01/01/2010     1      0
3: 01/01/2010     1      0
4: 02/01/2010     1      1
5: 02/01/2010     1      1

如果执行以下命令,您将获得所需的子集:

t[,if (sum(views) - sum(action) == 2 & sum(views) == 3) .SD,by=day]

输出为:

          day views action
1: 01/01/2010     1      1
2: 01/01/2010     1      0
3: 01/01/2010     1      0

最新更新