Data.table: PostgreSQL рдХреЗ %ilike% рдХреЛ data.table рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рджрд┐рд╕ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

рдореБрдЭреЗ data.table рдореЗрдВ %like% рдСрдкрд░реЗрдЯрд░ рдкрд╕рдВрдж рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реВрдВред PostgreSQL рдореЗрдВ ILIKE рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ рдЬрд╣рд╛рдВ __i__ рдХреЗрд╕-__рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓__ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред

рдЖрдк рдбреЗрдЯрд╛.рдЯреЗрдмрд▓ рдореЗрдВ %ilike% рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

рдЗрд╕реЗ data.table рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ ilike.R рдореЗрдВ рдПрдХ рдСрдкрд░реЗрдЯрд░ $ ignore.case = TRUE %ilike% grep() ред

ilike <- function(vector, pattern)
{
  # Intended for use with a data.table 'where'
  # Don't use * or % like SQL's like.  Uses regexpr syntax - more powerful.
  if (is.factor(vector)) {
    as.integer(vector) %in% grep(pattern,levels(vector), ignore.case = TRUE)
  } else {
    # most usually character, but integer and numerics will be silently coerced by grepl
    grepl(pattern,vector, ignore.case = TRUE)
  }
  # returns 'logical' so can be combined with other where clauses.
}

"%ilike%" = ilike

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг:

require(data.table)
cars = data.table(cars = rownames(mtcars), mtcars)

cars[ cars %like% 'fiat' ] # no case-insensitive search possible
cars[ grep('fiat', cars, ignore.case = TRUE) ] # using comparably long grep
cars[ cars %ilike% 'fiat' ] # the new %ilike%

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рдЪ рд╣реИ рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реЗрдЧреЗрдХреНрд╕ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рдерд╛ред рдлрд┐рд░ рднреА %ilike% рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ PostgreSQL рдЬрд╛рдирддрд╛ рд╣реВрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рд╡реИрд╕реЗ рднреА рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (?i) рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

cars[cars %like% '(?i)fiat']

рд╕рдЪ рд╣реИ рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реЗрдЧреЗрдХреНрд╕ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рдерд╛ред рдлрд┐рд░ рднреА %ilike% рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ PostgreSQL рдЬрд╛рдирддрд╛ рд╣реВрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рд╡реИрд╕реЗ рднреА рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИред

@andreasLD рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╡рд╣рд╛рдВ рднреА рдЯрд┐рдкреНрдкрдгреА рдХреА рдереА рд▓реЗрдХрд┐рди рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕реЗ #3333 рдФрд░ #3552 рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

franknarf1 picture franknarf1  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MichaelChirico picture MichaelChirico  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pannnda picture pannnda  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

st-pasha picture st-pasha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattdowle picture mattdowle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ