Как выбрать 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"?
Ответы
Ответ 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