#r #datatable #fread
#r #datatable #fread
Вопрос:
У меня есть папка с тридцатью файлами, каждый размером около 0,5 ГБ.
Я хотел бы прочитать их все в одной таблице данных. В идеале я хотел бы также читать только те файлы, в которых есть определенное слово.
Я использую таблицу данных, поэтому я хотел бы использовать fread
, если это возможно. Я попытался ввести папку в аргумент path, который не сработал.
Я пробую этот подход, и мне интересно, есть ли лучший
folder <- "~/Downloads/My Folder"
all.files <- list.files(path = folder, pattern = ".csv")
setwd(folder)
l <- lapply(all.files, fread, sep=",")
dt <- rbindlist( l )
setkey( dt , ID )
Это примеры имен файлов
filename01_2020.csv
filename01_2019.csv
filename01_2018.csv
Комментарии:
1. Это имя файла со словом или значение в одном из столбцов. Если это первое,
files <- list.files(pattern = 'yourpattern_.*\.csv", full.names = TRUE)
2. Все файлы имеют одинаковую структуру и похожий шаблон именования (но не совсем одинаковое имя). Это как:
nameOfFile_DateTime.csv
3. DateTime — это буквально эта строка или фактические дата и время
4. Не могли бы вы указать, какие преобразования вам понадобились в этих файлах. Это помогло бы предложить лучшие решения, учитывая, что данные будут большими при чтении большого количества файлов
5. Вы хотите получить
dt
уникальность по одному столбцу или по всему набору данных?
Ответ №1:
Мы можем использовать pattern
аргумент для сопоставления подстроки ‘filename’, за которой следует одна или несколько цифр ( \d
), за которыми следует _
, четыре цифры (‘year’) и .csv
в конце ( $
) строки
all.files <- list.files(path = folder, pattern = "^filename\d _\d{4}\.csv$")
l <- lapply(all.files, fread, sep=",")
dt <- rbindlist(l )
setkey(dt, ID)
unique(dt, by = 'ID')