Способ сортировки файлов в тибблы по имени файла в R?
У меня большой список файлов, и я хочу отсортировать столбцы из определенных файлов в списке на два тиббла. Имена файлов содержат фразы, которые мне нужны, чтобы определить, какие файлы куда идут, но я не могу придумать эффективный и универсальный способ сортировки и добавления. Все файлы содержат одинаковые столбцы и имена столбцов, но разное количество столбцов. Я бы предпочел решения tidyverse. Пример моих имен файлов:
A1_SORE6_REEC_T=1.csv
A5_minCMV_noREEC_T=5.csv
и тибблы выглядят примерно так, плюс еще несколько столбцов:
file1 <- tibble(ID = 1:50, Ch1_RawIntDen = sample(1:2000, 50), Ch1_IntDen = sample(1:2000, 50), Ch1_IntNorm = sample(1:2000, 50))
Я хочу иметь возможность фильтровать файлы по любой части или нескольким частям (A#, SORE6/minCMV, REEC/noREEC и T=#) этих имен файлов, а затем извлекать один столбец из отфильтрованных файлов и добавлять их все в один тиббл.
Технически я нашел способ добиться этого, но он ужасен и очень жестко запрограммирован. Я также хотел бы иметь возможность фильтровать по нескольким фразам в имени файла, но сейчас я могу сортировать только по одной фразе. Вот код, который я использую сейчас, в котором я извлекаю столбец Ch1_IntNorm из каждого файла:
filelist <- list.files(path = "data-cleaned", full.names = TRUE)
for (x in 1:length(filelist)) {
if (str_detect(string = filelist[[x]], "SORE6") == TRUE) {
if (exists("SORE6", envir = ) == FALSE) {
SORE6 <- read_csv(filelist[[x]], col_select = Ch1_IntNorm)
} else {
SORE6 <- rbind(SORE6,read_csv(filelist[[x]], col_select = Ch1_IntNorm))
}
} else {
if (exists("minCMV", envir = ) == FALSE) {
minCMV <- read_csv(filelist[[x]], col_select = Ch1_IntNorm)
} else {
minCMV <- rbind(minCMV, read_csv(filelist[[x]], col_select = Ch1_IntNorm))
}
}
}
Я не мог понять, как соединить все файлы вместе, не используя один файл в качестве отправной точки, поэтому и проверял наличие существующей переменной. Вы также можете видеть, что технически я не беру файлы «minCMV» на основе их имени, я просто определяю все, что не является «SORE6», как «minCMV», что не всегда будет иметь место в будущем.
Я хочу, чтобы окончательные тибблы выглядели примерно так:
SORE6 <- tibble(Ch1_IntNorm = sample(1:2000, 200))
Я новичок в R, поэтому был бы признателен за объяснение того, как работают любые решения. Спасибо!