如何根据子串匹配选择R data.table行(像一个SQL一样)

Cor*_*one 47 r string-matching data.table

我有一个带有字符列的data.table,并且只想选择那些包含子字符串的行.相当于SQLWHERE x LIKE '%substring%'

例如

> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number
Run Code Online (Sandbox Code Playgroud)

我如何只选择Name包含"mb"的行?

Mat*_*wle 83

data.tablelike功能.

Months[like(Name,"mb")]
        Name Number
1: September      9
2:  November     11
3:  December     12
Run Code Online (Sandbox Code Playgroud)

或者,%like%看起来更好:

> Months[Name %like% "mb"]
    Name Number
1: September      9
2:  November     11
3:  December     12
Run Code Online (Sandbox Code Playgroud)

注意%like%like()使用grepl(返回逻辑向量)而不是grep(返回整数位置).这样就可以与其他逻辑条件结合起来:

> Months[Number<12 & Name %like% "mb"]
        Name Number
1: September      9
2:  November     11
Run Code Online (Sandbox Code Playgroud)

而且你也可以获得正则表达式搜索(不仅仅是%或*通配符)的强大功能.

  • 你能用它来搜索多个字符串吗? (2认同)

Los*_*Lin 9

运算符%in%不进行部分字符串匹配,它用于查找值是否存在于另一组值中,即"a" %in% c("a","b","c")

要进行部分字符串匹配,您需要使用该grep()函数.您可以使用它grep来返回其中所有列的索引"mb".然后按该索引对行进行子集化

Months[grep("mb", Name)]    # data.table syntax slightly easier
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,实际上`Months [grep("mb",Name)]`似乎有效. (2认同)