Data.table: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ %ilike% PostgreSQL Π² data.table

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 13 Π΄Π΅ΠΊ. 2017  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Rdatatable/data.table

МнС ΠΎΡ‡Π΅Π½ΡŒ нравится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %like% Π² data.table, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΊ SQL-запросам. Π’ PostgreSQL Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ опция ILIKE , Π³Π΄Π΅ __i__ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ рСгистр-__Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра__.

Π§Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ %ilike% Π² data.table?

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ это Π² data.table, я Π±Ρ‹ создал ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ %ilike% Π² ilike.R Π½Π° основС like.R, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ignore.case = TRUE ΠΊ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ 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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

pannnda picture pannnda  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

sbudai picture sbudai  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

st-pasha picture st-pasha  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

jimhester picture jimhester  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

mattdowle picture mattdowle  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ