Попытка создать фрейм данных из списка файлов (во вложенных каталогах), содержащих отдельные столбцы для каждой папки. - PullRequest
0 голосов
/ 20 января 2020

Я относительно новичок в R и работаю над некоторыми данными изображения с камеры для моей диссертации. У меня есть папка, содержащая 29 папок, каждая из которых представляет лесной сайт, с различными подпапками, представляющими местоположения и периоды выборки.

Я создал list (?) В R, используя

files <- list.files(full.names = TRUE, recursive = TRUE, include.dirs =TRUE)

, который теперь дает мне «значения» для каждого изображения, похожего на это:

"./1780/Location1/Check_19.11.19/IMG_0171.JPG"

Теперь я хотел бы превратить это в фрейм данных и разделить его на дискретные столбцы , поэтому у меня есть один для «сайта» (пример 1780), один для местоположения (значения всегда будут 1 или 2), один для «периода времени» (т.е. Check_19. 11.19) и один для имени файла изображения. Это сделано для того, чтобы я мог прикрепить теги ID вручную в другом столбце. Я понятия не имею, если это правильный способ сделать это, я уверен, что есть более элегантный способ, но я еще не нашел его.

Если я пропустил уже существующий ответ, не стесняйтесь чтобы направить меня к этому. Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Это можно сделать с помощью функции separate из tidyr. Проверьте документацию для получения дополнительной информации.

  library(tidyr)
  library(dplyr)

  files <- list()
  files[1] <- "./1780/Location1/Check_19.11.19/IMG_0171.JPG"
  files[2] <- "./1780/Location2/Check_19.12.19/IMG_0171.JPG"


  df <- data.frame(column= unlist(files)) %>% 
           separate(column, sep="/", into=c("x","site", "location", "time","filename")) %>% 
           select(-x)

или

files <- gsub("^./","",files)
df <- data.frame(column= unlist(files)) %>% 
         separate(column, sep="/", into=c("site", "location", "time","filename"))
1 голос
/ 21 января 2020

Простой подход заключается в использовании read.table(), сначала обрезая записи с substring().

read.table(text = substring(files, 3), sep = "/", col.names = c("site", "location", "time","filename"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...