Есть ли функция для получения полных путей к каталогу файлов? - PullRequest
0 голосов
/ 12 января 2019

У меня есть каталог каталогов:

models <- dir("shopperml_pr_points")
> models
 [1] "add_email_subscribers" "custom_domain"         "email_campaign"        "fb_connect"            "gmb"                  
 [6] "holdout"               "ola"                   "ols"                   "post_to_fb"            "sev" 

В каждом каталоге есть другой каталог файлов, например,

> list.files(paste0("shopperml_pr_points", "/", models[1]))
[1] "add_email_subscribers_task_completed_pr_auc_1547157396.csv" "add_email_subscribers_task_completed_pr_auc_1547157473.csv"
[3] "add_email_subscribers_task_completed_pr_auc_1547157551.csv" "add_email_subscribers_task_completed_pr_auc_1547157631.csv"
[5] "add_email_subscribers_task_completed_pr_auc_1547157712.csv"

Я хотел бы создать список фреймов данных, по одному для каждого каталога в моделях. Итак, первый df будет основан на каталоге "add_email_subscribeers" и будет комбинацией из 5 CSV-файлов выше.

Я хотел использовать do.call (rbind, read.table) для этой записи, но, поскольку я не нахожусь в том же каталоге, откуда фактически читаются файлы, я нахожу это испытывающий. Я wnet путь вставки длинной строки для каждого отдельного файла CSV, но я задавался вопросом, есть ли более элегантное решение r, которое уже может обнаружить полный путь файла, например, в list.files(paste0("shopperml_pr_points", "/", models[1])).

Как создать список из 9 кадров данных на основе каталогов в моделях, где каждый каталог содержит ~ 5 файлов CSV, и эти 5 файлов CSV должны быть объединены в один кадр данных?

Ответы [ 2 ]

0 голосов
/ 12 января 2019
list.files(path = 'C:/Users/Documents/', all.files = T, full.names = TRUE)
0 голосов
/ 12 января 2019

Это должно сделать это. Сначала получите подкаталоги subdirs, затем для каждого подкаталога прочитайте и свяжите файлы вместе. Тогда у вас будет список DFS.

parent_dir <- "shopperml_pr_points"

subdirs <- dir(parent_dir, full.names=TRUE)

df_list <- lapply(subdirs, function(path){
  files <- dir(path, full.names=TRUE, pattern="\\.csv$")
  return(do.call(rbind, lapply(files, read.csv)))
})

Если вы хотите отслеживать, из каких строк и каких файлов в каждом df вы можете добавить столбец from_file к каждому df. Например, как это:

df_list2 <- lapply(subdirs, function(path){
  files <- dir(path, full.names=TRUE, pattern="\\.csv$")
  inner_df_list <- lapply(files, function(fname){
    dat <- read.csv(fname)
    dat$from_file <- fname
    return(dat)
  })
  return(do.call(rbind, inner_df_list))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...