๋๋ SQL ์ฟผ๋ฆฌ์ ์ต์ํ๊ธฐ ๋๋ฌธ์ data.table์ %like%
์ฐ์ฐ์๋ฅผ ์๋นํ ์ข์ํฉ๋๋ค. PostgreSQL์๋ __i__๊ฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋__์ ๋ํ๋ด๋ ILIKE ์ต์
๋ ์์ต๋๋ค.
%ilike%
๋ฅผ data.table์ ํฌํจ์ํค๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
์ด๊ฒ์ data.table์ ํฌํจํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ignore.case = TRUE
๋ฅผ grep()
ํธ์ถ์ ์ถ๊ฐํ๋ like.R์ ๊ธฐ๋ฐ์ผ๋ก ilike.R์์ %ilike%
์ฐ์ฐ์๋ฅผ ๋ง๋ญ๋๋ค.
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%
๋์ (?i)
ํ๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
cars[cars %like% '(?i)fiat']
์ ์๋ํ๋ ๊ฒ์ด ์ฌ์ค์ด๋ฉฐ ๊ทธ๋ฌํ ์ ๊ท์์ ์ธ์ํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ %ilike%
๊ฐ ๋ ์ง๊ด์ ์ผ๋ก ๋ณด์
๋๋ค. ์๋ง๋ ๋ด๊ฐ PostgreSQL์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์
๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ์ด์จ๋ ์ฝ๋ฉ ์คํ์ผ์ ๋ฌธ์ ์
๋๋ค.
@andreasLD ๋ค์ํ๋ฒ ์ฌ๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋น์ ์ ๋น์ ์ด ๊ฑฐ๊ธฐ์ ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์๋ง ๋ณด์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด #3333๊ณผ #3552์์ ๋ซํ๋ค๋ ๊ธฐ๋ก์ ์ฃผ๋ชฉํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ์๋ํ๋ ๊ฒ์ด ์ฌ์ค์ด๋ฉฐ ๊ทธ๋ฌํ ์ ๊ท์์ ์ธ์ํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ
%ilike%
๊ฐ ๋ ์ง๊ด์ ์ผ๋ก ๋ณด์ ๋๋ค. ์๋ง๋ ๋ด๊ฐ PostgreSQL์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ์ด์จ๋ ์ฝ๋ฉ ์คํ์ผ์ ๋ฌธ์ ์ ๋๋ค.