2015-03-12 2 views
0

Здравствуйте, Я пытаюсь запустить запрос, который использует оператор CASE из R. Я использую пакет SQLDF. Тот же запрос отлично работает в Mysql. Запроса приведены значения 0 или 1, «Экспресс» в соответствии со следующими ситуациями:R-SQLDF - SELECT ... CASE ... END

Выберите «Экспресс» =
ПРИМЕР
, когда E_MAIL как «% GMail%», то 1
, когда E_MAIL как " % Yahoo%», а затем 1
, когда E_MAIL как "%" % HOTMAIL затем 1
еще 0
END из данных
;

Это то, что я пытался в R:
альфа < -sqldf ("Выбрать "Экспресс"=
СЛУЧАЙ
когда E_MAIL как "% GMAIL%", то 1
когда E_MAIL как" % Yahoo% "а затем 1
, когда E_MAIL как "%" % HOTMAIL затем 1
остальное 0
END из данных");

Любая помощь будет оценена!

ответ

4

Проблемы в том, что строка запроса в вопросе имеет кавычки в кавычках, а синтаксис неверен. Используя базу данных по умолчанию SQLite (sqldf также поддерживает MySQL) мы имеем:

library(sqldf) 
data <- data.frame(E_MAIL = c("[email protected]", "[email protected]")) 

sqldf("select E_MAIL, 
    case 
    when E_MAIL like '%gmail%' then 1 
    when E_MAIL like '%yahoo%' then 1 
    when E_MAIL like '%hotmail%' then 1 
    else 0 
    end express 
    from data") 

дает:

 E_MAIL express 
1  [email protected]  0 
2 [email protected]  1 

Или, возможно, вы имели в виду, чтобы выполнить udpate. Это дает тот же результат с тестовыми данными, показанными:

data <- data.frame(E_MAIL = c("[email protected]", "[email protected]"), express = 0) 

sqldf(c("update data set express = 
    case 
    when E_MAIL like '%gmail%' then 1 
    when E_MAIL like '%yahoo%' then 1 
    when E_MAIL like '%hotmail%' then 1 
    else 0 
    end", "select * from main.data")) 

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

+0

Это работает !!! Второй вариант - тот, который я искал :) – shean10000

+0

@ G.Grothendieck, как вы справляетесь, если критерии в случае когда - это набор значений, и вы не можете использовать подобное. Ie столбец WHEN в <набор значений > и набор подобен этому c ('China', 'Hong', 'Taiwan') –

+0

Если это точные совпадения, вы можете создать новый фрейм данных из ключевых слов и присоединиться к нему в более крупный фрейм данных или если есть только несколько ключевых слов используют конструкцию sql 'in'. –