2016-11-03 4 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:]]+[[:>:]]'") 

私はsqldfパッケージを使用してRでこれを適用する:

私はいくつかのサンプルデータに対して実行したい
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/questions/33026213/about-sqldf-package-regexp-function-in-r)を参照してください。 –

答えて

2

常に望ましい結果を含めることができます。 this sourceに基づいて、TEXT -column fooの後に空白以外の文字が続く行を抽出するように見えます。

またgrep -functionとRに非常に単純にこれを行うことができます:

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

与える:

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

PS:それはあなたのデータセット与えない方が良いです関数と同じ名前。そのため私はdataの代わりにdatを使用しました。