2017-01-02 6 views
5

datatableパッケージの%like%演算子を大文字小文字を区別しないようにする方法はありますか?したがって、たとえば'hello' %like% 'HELlo'は一致します。 data.tableに定義に依存しないことで%like%演算子を大文字と小文字を区別しないようにする方法

+1

'%like% 'の代わりに'%chin% 'を使うか、部分文字列一致の場合は' ignore.case'コマンドを使って 'grepl'を使うことができます – akrun

+5

' tolower': 'tolower (a)%like tolower(b) 'のようなものです。 – nicola

+0

@nicolaいいアイデアありがとう – ChiseledAbs

答えて

6

`%like%` <- function (x, pattern) { 
    stringi::stri_detect_regex(x, pattern, case_insensitive=TRUE) 
} 

data.tableは、としてそれを定義しています

function (vector, pattern) 
{ 
    if (is.factor(vector)) { 
     as.integer(vector) %in% grep(pattern, levels(vector)) 
    } 
    else { 
     grepl(pattern, vector) 
    } 
} 

あなたが好きな場合は、factorケースをカバーできるが、それは非常に複雑な機能はありません。その中に「魔法」はありません。

私はstringiを(私の仕事では)組み込みの文字列操作よりはるかに堅牢で、フードの下で大きなパワーを提供します。

またとしてそれを定義することができます。あなたが好きならば(再び、factorケースを無視して)

`%like%` <- function (x, pattern) { 
    grepl(pattern, x, ignore.case=TRUE) 
} 

。あなたはこれを行うベクトル化patternを失う、tho。

data.table%like%の定義をスカッシュしたくない場合は、名前を%likeic%(大文字と同様)にします。

+0

レッスン: '%like%'は非常に一般的ですが単純な状況のために設計された便利な関数です。実際の仕事場はより堅牢な機能を備えた 'grepl'です。 'stringi'はもっと強力な' grel'を提供します – MichaelChirico

関連する問題