2017-01-02 22 views
5

datatable paketinde %like% işlecini büyük/küçük harfe duyarsız hale getirmenin bir yolu var mı? Yani örneğin 'hello' %like% 'HELlo' eşleşir. data.table yılında tanımına güvenerek vermeyerek% gibi% operatörün büyük/küçük harfe duyarsız olması nasıl sağlanabilir

+1

"% like%' yerine "% chin%' yi kullanabilir ya da bir substring eşleşmesi ise 'ignore.case' komutu olan' grepl' komutunu kullanabilirsiniz – akrun

+5

Ayrıca 'tolower': 'tolower öğesini de kullanabilirsiniz (a)%% tolower (b) 'gibi. – nicola

+0

@nicola iyi bir fikir Teşekkürler – ChiseledAbs

cevap

6

:

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

data.table olarak tanımlar:

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

İsterseniz factor davayı kapsayabilecek ama çok karmaşık fonksiyon değil. İçinde "büyü" yok.

stringi numaralı telefonu kullanıyorum (çalışmam için), yerleşik dizelerden çok daha sağlamdır ve kaputun altında daha fazla güç sağlar.

Ayrıca olarak tanımlayabiliriz:

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

(yine factor davayı görmezden) İstersen. pattern vektörünü kaybedersiniz, tho.

adını %likeic% (beğenme, durum ignore) data.table 'ın %like% için tanımını ezmek için istemiyorsanız olun.

+0

dersi: '% like%' bir kolaylık işlevidir, yani çok yaygın fakat basit durumlar için tasarlanmıştır. Gerçek iş gücü, daha sağlam özelliklere sahip olan “grepl”; ve 'stringi 'daha güçlü bir grepl' sağlar – MichaelChirico