Очень специфические регулярные выражения внутри цикла for R
Я пытаюсь запустить цикл for 39 категорий, используя grepl. Строки, которые я пытаюсь найти, имеют много совпадений в словах, которые они используют. Я не очень опытен с регулярными выражениями и нахожу, что ни один из якорей или механизмов группировки, которые я использую, работает малейшим образом
Сначала я записываю свои выражения в файл Excel и импортирую их в R Studio через read.delim.
reg.ex <- read.delim("combined_codes.csv", sep = ",")
Некоторые категории, которые я пытаюсь сопоставить в базе данных, используют одни и те же слова, но я хочу сохранить их как отдельные категории, когда пишу файлы csv в цикле. Вот пример результирующего фрейма данных с некоторыми из более сложных выражений. Это также синтаксис, который я сейчас использую для сопоставления с grepl.
EXPRESSION
STORAGE
^DIVERSION TO STORAGE$
^BASE FLOW$ [^STORAGE]
^BANKFULL FLOW$ [^STORAGE]
^MITIGATION$ [^BY]
^MITIGATION BY NON_USE$
^MITIGATION BY DELIVERY$
[^RECHARGE FOR] [^SUB]IRRIGATION [^STORAGE]
^RECHARGE FOR IRRIGATION$
^SUBIRRIGATION$
ADMINISTRATIVE
Вот небольшое подмножество примеров. Есть много категорий с "ХРАНЕНИЕМ" в их названии, которое я пытаюсь включить в большую категорию хранения. Однако у многих категорий есть категория хранения, дополняющая их. Например, BASE FLOW и BASE FLOW STORAGE - это две категории, которые я бы хотел разделить, а BASE FLOW STORAGE сгруппированы в большую категорию STORAGE. Я надеюсь с помощью [^STORAGE], который удалит категории хранения. Кроме того, BASE FLOW и BANKFULL FLOW содержат слово "поток", но они должны оставаться отдельными. Я надеюсь, что использование ^ для начала строки и $ для завершения строки сохранит эти две категории раздельными, однако это не сработало. Слово FLOW встречается не менее 10 раз в других категориях. Наконец, ИРРИГАЦИЯ - это еще одна категория, которая может быть легко осложнена другими словами. Я надеюсь, что используя те же якоря ^$[^], я могу оставить последние 3 строки в отдельной категории.
Когда я запускаю цикл...
# rights.merge is data frame I am trying to subset via the expressions
# reg.ex.match is a vector of these expressions
for(i in as.character(reg.ex.match)){
sector.name <- subset(right.merge, grepl(paste(reg.ex.match, collapse =
"|"), as.character(rights.merge$Beneficial_Use)))
file.name <- paste(out.directory, "USE_", i, ".csv", sep = "")
write.csv(sector.name, file.name)
print(file.name)
}
То, что возвращено, является CSV нескольких различных выгодных применений, и не было точного соответствия, которое я пытаюсь получить.
Я понимаю, что это часто задаваемый вопрос, однако мне еще предстоит найти ответ, который мне поможет. Любые и все предложения приветствуются.