r gsub и регулярное выражение, беря y*_x* из y*_x*_xxxx.csv

Общая ситуация: в настоящее время я пытаюсь назвать кадры данных внутри списка в соответствии с файлами csv, из которых они были получены, я обнаружил, что использование gsub и regex — это путь. К сожалению, я не могу произвести именно то, что мне нужно, только кое-что. Я был бы очень благодарен за некоторые подсказки от кого-то более опытного, может быть, есть разумный чит-код R regex?

Файл называется r2_m1_enzyme.csv, скрипт должен использовать первые 4 символа для имени соответствующего фрейма данных r2_m1 и так далее…

# generates a list of dataframes, to mimic a lapply(f,read.csv) output:
data <- list(data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)))

# this mimics file names obtained by  list.files() function
f <-c("r1_m1_enzyme.csv","r2_m1_enzyme.csv","r1_m2_enzyme.csv","r2_m2_enzyme.csv")

# this should name the data frames according to the csv file they have been derived from
names(data) <- gsub("r*_m*_.*","\\1", f)

но это не работает так, как ожидалось... они называются r2_m1_enzyme.csv вместо желаемого r2_m1, хотя .* должен это остановить?

If I do:

names(data) <- gsub("r*_.*","\\1", f)

Я получаю r1, r2, r3... но мне не хватает второго индекса.

Вопрос: Итак, мой вопрос: какое регулярное выражение позволит мне получить строки «r1_m1», «r2_m1», «r1_m2», ... из строк, которые называются r*_m*_xyz.csv

История поиска: регулярное выражение R использует * только для одного символа, замена регулярного выражения Gsub, использование частей имени файла для имени кадра данных, шпаргалка по регулярному выражению R,...


person user3275209    schedule 11.02.2014    source источник


Ответы (1)


Если ваши имена всегда состоят из пяти символов, вы можете использовать substr:

substr(f, 1, 5)

Если вы хотите использовать gsub, вы должны сгруппировать свое выражение (через ( и )), потому что \\1 относится к первой группе и вставляет ее содержимое, например:

gsub("^(r[0-9]+_m[0-9]+).*", "\\1", f)
person sgibb    schedule 11.02.2014