Используйте r sqldf выберите LIKE для подмножества данных с множеством идентификаторов - PullRequest
0 голосов
/ 23 октября 2019

У меня короткий вопрос, касающийся пакета sqldf в R. Я хочу поместить данные для разных идентификаторов в один столбец. Идентификаторы - это DOI статьи, и поскольку я фильтрую журналы, я хочу отсортировать только по идентификатору журнала часть DOI.

Это работает для одного идентификатора:

newdata <- sqldf("select * from data where column1 LIKE '%stringcontent%')

Расширение работает для нескольких типов идентификаторов:

newdata <- sqldf("select * from data where column1 LIKE '%stringcontent1%'
                  or column1 LIKE '%stringcontent2%'
                  or culumn1 LIKE '%stringcontent3%')

Есть ли возможность использовать stringcontent1, stringcontent2 и stringcontent3 в качестве вектора для упрощения команды? У меня большой набор данных с примерно 200 идентификаторами, и это было бы намного проще, чем добавлять каждый отдельный идентификатор.

Большое спасибо заранее!

1 Ответ

2 голосов
/ 23 октября 2019

Создать целевую таблицу из строк и затем присоединить ее к основной таблице. D. Мы показали тестовые таблицы в примечании в конце.

library(sqldf)

sqldf("select d.* 
  from data d join target t on d.x like '%' || t.string || '%'")
##                    x
## 1 x stringcontent1 y

Это также будет работать:

sqldf("select d.* from data d join target t on instr(d.x, t.string)")

Примечание

target <- structure(list(string = c("stringcontent1", "stringcontent2", 
  "stringcontent3")), class = "data.frame", row.names = c(NA, -3L))

data  <- structure(list(x = c("x stringcontent1 y", "xx stringcontent9 yy", 
"def")), class = "data.frame", row.names = c(NA, -3L))
...