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