2016-11-03 2 views
1

У меня есть следующий MYSQL запрос:sqldf функция RLIKE

"select * from data WHERE TEXT RLIKE '[[:<:]]digital[[:>:]]' OR TEXT RLIKE '[[:<:]]data[[:>:]]' OR TEXT RLIKE '[[:<:]]agile[[:>:]]' OR (TEXT RLIKE '[[:<:]]self[[:>:]]' AND TEXT RLIKE '[[:<:]]service[[:>:]]') OR TEXT RLIKE '[[:<:]]cloud[[:>:]]' OR TEXT RLIKE '[[:<:]]insight[^[:space:]]+[[:>:]]' OR TEXT RLIKE '[[:<:]]modern[^[:space:]]+[[:>:]]'") 

Я хочу, чтобы применить это в R с использованием пакета sqldf:

sqldf("select * from data WHERE TEXT RLIKE '[[:<:]]digital[[:>:]]' OR TEXT RLIKE '[[:<:]]data[[:>:]]' OR TEXT RLIKE '[[:<:]]agile[[:>:]]' OR (TEXT RLIKE '[[:<:]]self[[:>:]]' AND TEXT RLIKE '[[:<:]]service[[:>:]]') OR TEXT RLIKE '[[:<:]]cloud[[:>:]]' OR TEXT RLIKE '[[:<:]]insight[^[:space:]]+[[:>:]]' OR TEXT RLIKE '[[:<:]]modern[^[:space:]]+[[:>:]]'") 

, что я хочу работать против некоторых выборочных данных:

data <- structure(list(Participant = 1:3, A = c("and other agile digital, things", "testing test and modern", "nothing here"), B = c("", "b", "b"), C = c("c", "c", "c")), .Names = c("Participant", "TEXT", "other", "another"), row.names = c(NA, -3L), class = "data.frame") 

Я получаю следующую ошибку

Error in sqliteSendQuery(con, statement, bind.data) : error in statement: near "RLIKE": syntax error 

Кажется, что этот пакет не похож на заявления RLIKE. Почему, и как мне обойти это?

+1

Pls четко определяет, что вы просите. Команда «нравится» не «Rlike». –

+0

@ChirayuChamoli Синтаксис MySQL, который я хотел бы использовать, - это RLIKE http://dev.mysql.com/doc/refman/5.7/en/regexp.html – lmcshane

+2

Взгляните на [это] (http://stackoverflow.com/вопросы/33026213/о-sqldf-пакет-регулярное_выражение-функция-в-г). –

ответ

2

Всегда полезно указать желаемый результат. На основании this source похоже, что вы хотите извлечь строки, где в TEXT -колонке foo следует символ без пробела.

Вы также можете сделать это довольно просто в R с grep -функции:

dat[grep('.*(foo)[^ ]', dat$TEXT),] 

, который дает:

Participant     TEXT other another 
1   1 and other foo, things    c 

PS: лучше не давать свой набор данных о то же имя, что и функция; по этой причине я использовал dat вместо data