Что такое эквивалент R выражения SQL LIKE 'description%'?

Не знаю, как еще спросить об этом, но я хочу найти термин в нескольких строковых элементах. Вот как выглядит мой код (но неправильно):

inplay = vector(length=nrow(des))
for (ii in 1:nrow(des)) {
 if (des[ii] = 'In play%')
  inplay[ii] = 1
 else inplay[ii] = 0
}

des - это вектор, в котором хранятся строки, такие как "Swinging Strike", "In play (run (s))", "In play (out (s) записано)" и т.д. То, что я хочу, чтобы сохранить inplay, является 1s и 0s, соответствующий вектору des, с 1s в inplay, указывающим, что значение des имеет значение "In play%" в нем и 0s в противном случае.

Я считаю, что 3-я строка неверна, потому что все это возвращает вектор 0s с 1 в последнем элементе.

Спасибо заранее!

Ответы

Ответ 1

R-аналог SQL LIKE - это просто обычный синтаксис индексации.

Оператор "LIKE" выбирает строки данных из таблицы, сопоставляя строковые значения в указанном столбце с созданным пользователем шаблоном

> # create a data frame having a character column
> clrs = c("blue", "black", "brown", "beige", "berry", "bronze", "blue-green", "blueberry")
> dfx = data.frame(Velocity=sample(100, 8), Colors=clrs)
> dfx
            Velocity    Colors
        1       90       blue
        2       94      black
        3       71      brown
        4       36      beige
        5       75      berry
        6        2     bronze
        7       89    blue-green
        8       93    blueberry

> # create a pattern to use (the same as you would do when using the LIKE operator)
> ptn = '^be.*?'  # gets beige and berry but not blueberry
> # execute a pattern-matching function on your data to create an index vector
> ndx = grep(ptn, dfx$Colors, perl=T)
> # use this index vector to extract the rows you want from the data frome:
> selected_rows = dfx[ndx,]
> selected_rows
   Velocity Colors
     4       36  beige
     5       75  berry 

В SQL это будет:

SELECT * FROM dfx WHERE Colors LIKE ptn3

Ответ 2

В пакете data.table есть синтаксис, который часто похож на SQL. Пакет включает %like%, который является "функцией удобства для вызова regexpr". Вот пример, взятый из файла справки:

## Create the data.table:
DT = data.table(Name=c("Mary","George","Martha"), Salary=c(2,3,4))

## Subset the DT table where the Name column is like "Mar%":
DT[Name %like% "^Mar"]
##      Name Salary
## 1:   Mary      2
## 2: Martha      4

Ответ 3

Что-то вроде regexpr?

> d <- c("Swinging Strike", "In play (run(s))", "In play (out(s) recorded)")
> regexpr('In play', d)
[1] -1  1  1
attr(,"match.length")
[1] -1  7  7
> 

или grep

> grep('In play', d)
[1] 2 3
>