каталог - вектор символов с различными значениями. Он имеет следующую структуруОбнаружение нескольких шаблонов с использованием grepl с большими векторами шаблонов в R
value name location companybrand
1111 ikea boston nike
1234 7/11 new york marlboro
1456 walmart new york marlboro
список содержит все города в США -> Чикаго, Бостон, Нью-Йорк, Лос-Анджелес и еще один столбец с полным именем брендов
Location Brand
New York, 5th Avenue Coca Cola LTD
New York, 51 Str Nike Corporation
New York, Broadway Marlboro Incorporated
if (sum(grepl(paste("\\b", as.character(location), "\\b", sep = ""), catalog$value[i], fixed = FALSE)) > 0 &&
sum(grepl(paste("\\b", as.character(companybrand), "\\b", sep = ""), catalog$value[i], fixed = FALSE)) > 0){
subdata <- subset(listing, listing$local == as.character(location[which(grepl(paste("\\b", as.character(location), "\\b", sep = ""), catalog$value[i], fixed = FALSE)]) && listing$commercial == as.character(companybrand[which(grepl(paste("\\b", as.character(companybrand), "\\b", sep = ""), catalog$value[i], fixed = FALSE))]))
}
Как вам может видеть, я пытаюсь запустить функцию grepl с использованием нескольких моделей, которые возвращает следующую ошибку:
Warning message:
In grepl(paste("\\b", distmunicipality, "\\b", sep = ""), ctlg$distvalor[i], :
argument 'pattern' has length > 1 and only the first element will be used
Я прочитал в других постах, что соответствующее решение этой проблемы является свернуть все образцы должны быть испытаны в одну строку с трубными сепараторами, следующим образом:
companybrand <- paste(companybrand, collapse = "|")
location <- paste(location, collapse = "|")
, который прекрасно работает для небольших векторов, но в моем случае у меня есть 4 миллиона элементов в companybrand, что вызывает мое R прекратить из-за недостаточной памяти. Есть ли практический способ сделать это (возможно, используя sapply) для запуска этого матча, не прибегая к расчетному налогообложению?
Посмотрите на пакет 'stringi'. Это C/++ - поддерживается, и большинство операций векторизованы поверх 'string' и' pattern' (которые используют 'string' и' pattern'). Вероятно, это будет значительно быстрее и эффективнее. – hrbrmstr
Каков ваш ожидаемый результат? –
@hrbrmstr. Раньше я использовал пакет stringr, по отдельности, функцию str_detect, чтобы это исправить, и хотя это работает, мне показалось, что с огромным объемом данных это было довольно неэффективно, поэтому я прибегал к использованию grepl под предположение о том, что базовые функции R являются более эффективными с точки зрения вычислений. Неужели я так ошибаюсь? –