Сценарий R для открытия папок, определения файла, переименования и чтения - PullRequest
1 голос
/ 22 апреля 2020

Я недавно научился кодировать с помощью R, и мне как-то удается обрабатывать данные в файлах, но я не могу заставить их манипулировать самими файлами. Вот моя проблема:

Я бы хотел последовательно открыть в моем рабочем каталоге "Laurent/R" 3 папки, которые в нем находятся ("gene_1", "gene_2", "gene_3").

В каждой папке я хочу, чтобы один указанный файл c .csv (файл, содержащий указанное c слово "Cq") был переименован в "gene_x_Cq" (а затем переместить эти 3 переименованных файла в новая папка (это необходимо?)).

Затем я хочу иметь возможность последовательно открывать эти 3 .csv-файла (я полагаю, с read.csv) для манипулирования данными внутри них. Я смотрел на различные функции, такие как list.file, unlist, file.rename, но я уверен, что они подходят, и я не могу понять, как использовать их в моем случае. Кто-нибудь может помочь? (Я использую Ма c) Спасибо Лоран

1 Ответ

2 голосов
/ 22 апреля 2020

Вот потенциальное решение. Если вы чего-то не понимаете, просто кричите и спросите!

setwd("Your own file path/Laurent")
library(stringr)

# list all .csv files
csvfiles <- list.files(recursive = T, pattern = "\\.csv")
csvfiles

# Pick out files that have cq in them, ensuring that you ignore uppercase/lowercase
cq.files <- csvfiles[str_detect(csvfiles, fixed("cq", ignore_case = T))]

# Get gene number for both files - using "2" here because gene folder is at the second level in the file path
gene.nb <- str_sub(word(cq.files, 2, 2, sep = "/"), 6, 6)
gene.nb

# create a new folder to place new files into
dir.create("R/genefiles")

# This will copy files, not move them. To move them, use file.rename - but be careful, I'd try file.copy first.
cq.files <- file.copy(cq.files,
                        paste0("R/genefiles/gene_", gene.nb, "_", "Cq", ".csv"))

# Now to work with all files in the new folder
library(purrr)
genefiles <- list.files("R/genefiles", full.names = T)

# This will bring in all data into one dataframe. If you want them brought in as separate dataframes,
# use something like gene1 <- read.csv("R/genefiles/gene_1_Cq.csv")
files <- map_dfr(genefiles, read.csv)
...