2016-04-06 1 views
0

У меня есть оператор SQLDF, который ссылается на фреймворк данных, но я также хочу, чтобы он ссылался на вектор, который не является частью фрейма данных, как показано ниже.Ссылка на вектор в выражении R sqldf

sqldf("select count(*) from carddata where new_user_indicator == 'Y' & loyalty_threshold > average_loyalty_threshold") 

average_loyalty_threshold - автономный вектор, который рассчитывается отдельно и не является частью фрейма данных.

Как я могу ссылаться на автономный вектор в разделе sqldf where.

Спасибо

+0

Пожалуйста, объясните, что именно вы хотите предоставить воспроизводимый пример, включая все входы и заявления библиотек и ожидаемый результат. –

ответ

1

Если предположить, что данные выглядит примерно так:

library(sqldf) 

carddata = data.frame(new_user_indicator = c('N','N','Y','Y','Y'), 
         loyalty_threshold = c(1,1,5,3,1)) 

И ваша цель состоит в том, чтобы использовать другой вектор с одним значением для выбора всех объектов carddata которых лояльность порог выше этого значения , вы можете использовать следующее:

# create a dataframe from average_loyalty_threshold so that sqldf will see it as a table 
average_loyalty_threshold = data.frame(threshold = 2) 

sqldf("select count(*) 
     from carddata 
     where new_user_indicator == 'Y' 
     and loyalty_threshold > (select * from average_loyalty_threshold)") 

#returns 

    count(*) 
1  2 

с (select * from average_loyalty_threshold) вы можете выбрать, что одно значение, что вы Looki ng для.

Однако есть более простой способ:

average_loyalty_threshold = 2 

fn$sqldf("select count(*) 
    from carddata 
    where new_user_indicator == 'Y' 
    and loyalty_threshold > `average_loyalty_threshold`") 

#returns 

    count(*) 
1  2 

Здесь я прошел значение порога лояльности прямо в запросе.

Вы также можете использовать sprintf() для вставки этого текста, но, как указывалось в комментарии других, fn$ - это рекомендуемый способ ссылки на внешние переменные.

+0

Обычный способ выполнения текстовой подстановки с sqldf заключается в использовании 'fn $'. См. '? Fn' и примеры на домашней странице sqldf: https://github.com/ggrothendieck/sqldf –

+0

Привет @ niczky12, я не был знаком с sprintf в контексте R. Я нашел эту статью: http: //rfunction.com/archives/2279, который показывает еще один отличный пример. Я также собираюсь проверить fn $. Всем спасибо. – Jazzmine

+0

@ G.Grothendieck Спасибо за подсказку. Однако метод 'fn $' выдает ошибку с именами переменных, в которых есть символы подчеркивания. Я думаю, что это все еще продолжается. Sprintf кажется более стабильным. – niczky12

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

  • Нет связанных вопросов^_^