读取与R中的子目录模式匹配的文件

读取与R中的子目录模式匹配的文件,r,list,csv,R,List,Csv,我已经用了很多帖子让我走到了这一步(比如这里和这里,但无法完成我在R中需要的东西) 我有许多.csv文件分布在多个子目录中,我想读入这些文件,然后作为单独的对象保存到相应的basename。最终的结果是将这些文件都绑定在一起。下面是示例目录结构和我尝试的一些内容: ./DATA/Cat_Animal/animal1.csv ./DATA/Dog_Animal/animal2.csv ./DATA/Dog_Animal/animal3.csv ./DATA/Dog_Animal/animal3.1

我已经用了很多帖子让我走到了这一步(比如这里和这里,但无法完成我在R中需要的东西)

我有许多.csv文件分布在多个子目录中,我想读入这些文件,然后作为单独的对象保存到相应的basename。最终的结果是将这些文件都绑定在一起。下面是示例目录结构和我尝试的一些内容:

./DATA/Cat_Animal/animal1.csv
./DATA/Dog_Animal/animal2.csv
./DATA/Dog_Animal/animal3.csv
./DATA/Dog_Animal/animal3.1.csv

#read in all csv files
files <- list.files(path="./DATA", pattern="*.csv", full.names=TRUE, recursive=TRUE)
/DATA/Cat\u Animal/animal1.csv
./DATA/Dog_Animal/animal2.csv
./DATA/Dog_Animal/animal3.csv
./DATA/Dog_Animal/animal3.1.csv
#读取所有csv文件

文件这个问题实际上是两个问题,考虑把它们拆分。在最后一部分中,如何将一个充满数据帧的列表结合在一起尝试:

finalDf = do.call(rbind, result)

您可能需要从
stringr
包中使用
stru-split()
来提取所需的部分文件路径。您也可以使用
str-extract()
正则表达式。

我想我找到了一个短期解决方案,因为幸运的是,我目前只有几个子目录

myFiles1 <- list.files(path = "./DATA/Cat_Animal/", pattern="animal+.*csv")

processFile <- function(f) {
  df <- read.csv(file = paste0("./DATA/Cat_Animal/", f ))
}
result1 <- sapply(myFiles1, processFile)

#then do it again for the next subdir:
myFiles2 <- list.files(path = "./DATA/Dog_Animal/", pattern="animal+.*csv")

processFile <- function(f) {
  df <- read.csv(file = paste0("./DATA/Dog_Animal/", f ))
}
result2 <- sapply(myFiles2, processFile)

finalDf = do.call(rbind, result1, result2)

myFiles1好的,我将删除问题的后半部分,因此请进行编辑,重点是在文件上循环/读取并保存到相应的基名。循环在哪里?您能否更准确地介绍一下您的示例-哪些内容将保存在什么对象的位置和下面?您是否在unix中使用正则表达式?如果是,请使用
str_extract()
可能正是您要查找的内容。谢谢。在unix中,读取子目录中所有匹配文件的路径应该是:./DATA/*\u Animal/Animal*.csv。基于str_extract()文档,如何添加到list.files()中并不容易,也不清楚,但会继续尝试
myFiles1 <- list.files(path = "./DATA/Cat_Animal/", pattern="animal+.*csv")

processFile <- function(f) {
  df <- read.csv(file = paste0("./DATA/Cat_Animal/", f ))
}
result1 <- sapply(myFiles1, processFile)

#then do it again for the next subdir:
myFiles2 <- list.files(path = "./DATA/Dog_Animal/", pattern="animal+.*csv")

processFile <- function(f) {
  df <- read.csv(file = paste0("./DATA/Dog_Animal/", f ))
}
result2 <- sapply(myFiles2, processFile)

finalDf = do.call(rbind, result1, result2)