2016-04-08 3 views
-2

Я имею дело с набором данных с данными на уровне дня (одна строка на один день) - с данными для продукта (который рекламируется) о том, он просматривается пользователем или если предпринимается действие.Повысить эффективность оператора Sqldf в R альтернативными способами

Перед тем, как запустить мой анализ на этом наборе данных в R - я хочу отфильтровать данные таким образом, что я отфильтровываю все дни, когда разность количества просмотров продукта и количество раз, когда действие принимаются в 2 и взглядах 3. я был в состоянии сделать это с помощью оператора SQL в R - Сначала я отфильтровать необходимые дни с помощью пакета 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) 

затем я присоединиться к этому набору данных (о/p SQL) с исходным, чтобы отфильтровать исходный набор данных с требуемыми датами.

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

Но это принимает близко к 5 минут для каждого набора данных для выполнения и, как это должно работать каждый день, интересно, если есть более быстрый способ, чтобы выполнить эту операцию и получить тот же O/P.

+1

Предоставление образцов входных данных и ожидаемых выходных данных будет наиболее полезно при получении рабочего ответа. – Gopala

+0

Попробуйте добавить указатель. Для примера см. Страницу sqldf github. –

ответ

0

Попробуйте использовать 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 
+0

@PratyushTallapragada Установили ли вы пакет data.table? Если вы не знаете о «data.table», сначала прочитайте учебник для «data.table». Это несколько отличается от data.frame. –

+1

Не использовал его раньше. Прошел базовый синтаксис, и теперь - попробовал это в моем файле, и он дал мне 0 строк. Я вижу, что вы отредактировали свое решение, чтобы включить .SD - я вижу, что его параметр, связанный с фреймом данных, используемый в таблице данных - не могли бы вы рассказать мне, что его использует, и почему мы должны использовать это в этом случае? Спасибо вам за помощь! –

+0

Также - предупреждения, которые я получаю до того, как o/p равен 0: «In if ((count (views) - count (action)) == ...: условие имеет длину> 1, и только будет использоваться первый элемент " Не уверен, что это значит. Любая идея? –

Смежные вопросы