Подтвердить что ты не робот

Как выбрать R data.table строк на основе соответствия подстроки (a la SQL like)

У меня есть таблица данных с символьным столбцом и хочу выбирать только те строки, которые содержат подстроку в ней. Эквивалентно SQL WHERE 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

Как выбрать только те строки, где Name содержит "mb"?

4b9b3361

Ответ 1

data.table имеет функцию like.

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

Или, %like% выглядит лучше:

> Months[Name %like% "mb"]
    Name Number
1: September      9
2:  November     11
3:  December     12

Обратите внимание, что %like% и like() используют grepl (возвращает логический вектор), а не grep (возвращает целые местоположения). Чтобы это можно было сочетать с другими логическими условиями:

> Months[Number<12 & Name %like% "mb"]
        Name Number
1: September      9
2:  November     11

и вы получаете возможность поиска регулярных выражений (а не только% или *).

Ответ 2

Оператор %in% не выполняет частичное сопоставление строк он используется для нахождения значений в другом наборе значений, т.е. "a" %in% c("a","b","c")

Чтобы выполнить частичное совпадение строк, вам нужно использовать функцию grep(). Вы можете использовать grep, чтобы возвращать индекс всех столбцов с "mb" в нем. Затем подмножество строк этим индексом

Months[grep("mb", Name)]    # data.table syntax slightly easier