如何使%like%运算符不区分大小写

时间:2017-01-02 11:08:41

标签: r data.table

有没有办法让%like%包中的datatable运算符不区分大小写?因此,例如'hello' %like% 'HELlo'将匹配。

1 个答案:

答案 0 :(得分:8)

不依赖data.table中的定义:

`%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(因为我的工作)比内置字符串操作更强大,并且提供了更多功能。

您也可以将其定义为:

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

(再次,忽略factor案例),如果你愿意。你失去了矢量化的pattern这样做了。

如果您不想压缩%likeic%的{​​{1}}的定义,请设置名称data.table(例如,忽略大小写)。