是否有检索文件目录完整路径的功能?

时间:2019-01-12 01:12:05

标签: r

我有一个目录目录:

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_subscribers”,并将是上述5个csv文件的组合。

我想在每个this帖子中使用do.call(rbind,read.table),但是由于我不在与实际读取文件所在的目录中,因此我发现了这一挑战。我设法为每个单独的csv文件粘贴一个长字符串,但我想知道是否有更优雅的r解决方案可以检测文件的完整路径,例如list.files(paste0("shopperml_pr_points", "/", models[1]))中的文件。

如何基于模型中的目录创建9个数据帧的列表,其中每个目录包含约5个csv文件,而这5个csv文件应折叠为一个数据帧?

2 个答案:

答案 0 :(得分:1)

这应该做到。首先获取子目录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中哪些行来自哪些文件,可以在每个df中添加一个from_file列。例如这样的:

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))
})

答案 1 :(得分:1)

list.files(path = 'C:/Users/Documents/', all.files = T, full.names = TRUE)