Использование% like% и% in% для запроса кадра данных в R - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть фрейм данных, который я пытаюсь запросить, используя оператор% in% и содержимое другого фрейма данных, который работал отлично.
Однако то, что я сейчас пытаюсь сделать, это также запросить, где содержимое моего фрейма данных аналогично второму фрейму данных.
Есть ли способ объединить операторы %in% и %like%?

Я вставил свой код, используя оператор% in% ниже, который работает как положено:

sessionData <- as_data_frame(sessionData[sessionData$pagePath %in% pageUrls$page_url,])

Когда используются %in% и %like%, он возвращает данные только из первой строки в поисковом фрейме данных - есть ли лучший способ запросить это?

Edit: В соответствии с просьбой, я вставил ниже некоторые примеры воспроизводимых данных, а также дополнительную информацию об ожидаемых результатах:

df <- data.frame("url" = c('url1','url1-variation1','url1-variation2','url2','url2-variation1','url2-variation2','url3','url3-variation1','url3-variation2'), stringsAsFactors = FALSE)
df_lookup <- data.frame("url" = c('url1','url2','url3'), stringsAsFactors = FALSE)

df_out <- as_data_frame(df[df$url %in% df_lookup$url,])

Как видите, при использовании оператора %in% он возвращает только точные совпадения. То, что я пытаюсь сделать, это также вернуть варианты, используя оператор %like% или что-то подобное.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать %like% из пакета data.table:

library(data.table)
df_out <- df[df$url %like% paste0("(",df_lookup$url,")",collapse="|"),,drop=FALSE]
df_out
#               url
# 1            url1
# 2 url1-variation1
# 3 url1-variation2
# 4            url2
# 5 url2-variation1
# 6 url2-variation2
# 7            url3
# 8 url3-variation1
# 9 url3-variation2

Или вы можете определить свой собственный оператор:

`%like_any%` <- function(lhs, rhs){
  grepl(paste0("(",rhs,")",collapse="|"),lhs)
}

df_out <- df[df$url %like_any% df_lookup$url,,drop=FALSE]
df_out
#               url
# 1            url1
# 2 url1-variation1
# 3 url1-variation2
# 4            url2
# 5 url2-variation1
# 6 url2-variation2
# 7            url3
# 8 url3-variation1
# 9 url3-variation2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...