У меня есть папка, в которую будут поступать необработанные данные с удаленных станций. Структура данных в основном контролируется датой приобретения, с общим шаблоном, заданным следующим образом:
root/unit_mac_address/date/data_here/
Вот пример ограниченного запроса tree
для одной единицы с несколькими днями записи.
.
├── 2020-04-03
│ ├── 2020-04-03T11-01-31_capture.txt
│ ├── 2020-04-03T11-32-36_capture.txt
│ ├── 2020-04-03T14-58-43_capture.txt
│ ├── img
│ └── temperatures.csv
...
├── 2020-05-21
│ ├── 2020-05-21T11-10-55_capture.txt
│ ├── img
│ └── temperatures.csv
└── dc:a6:32:2d:b8:62_ip.txt
Внутри каждой папки img
у меня есть сотни / тысячи изображений, которые имеют временную метку с указанием даты и времени получения.
Моя цель - объединить данные в temperatures.csv
со всех блоков в target_date
.
Мой текущий подход следующий:
# from root dir, get all the temperatures.csv files
all_files <- list.files(pattern = "temperatures.csv",
full.names = TRUE,
# do it for all units
recursive = TRUE)
# subset the files from the list that contain the target_date
all_files <- all_files[str_detect(all_files, target_date)]
# read and bind into df
df <- lapply(all_files, function(tt) read_csv(tt)) %>%
bind_rows()
Я решил искать temperatures.csv
, потому что это без метки времени, но я думаю, что все равно просматриваю все imgs. Я не думаю, что есть способ ограничить list.files()
определенным уровнем или рекурсией.
Это работает, но это лучший способ сделать это? Что можно сделать для повышения производительности? Данные поступают каждый день, поэтому растет число файлов, которые функция list.files()
должна будет обработать до go для каждого из 10-20 единиц.
Было бы эффективнее, если бы файлы temperature.csv
сами содержали метку времени (2020-05-26_temperatures.csv
)? Я могу запросить временные метки для самих файлов temperatures.csv
(не текущий подход), но я чувствую, что смогу справиться с этим на своей стороне.
Было бы более эффективно искать только каталоги, у которых есть установленный срок? а затем построить пути так, чтобы он смотрел только на первый уровень в каждом каталоге target_date? Любые намеки на это приветствуются.