Очень специфические регулярные выражения внутри цикла 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 нескольких различных выгодных применений, и не было точного соответствия, которое я пытаюсь получить.

Я понимаю, что это часто задаваемый вопрос, однако мне еще предстоит найти ответ, который мне поможет. Любые и все предложения приветствуются.

0 ответов

Другие вопросы по тегам