2017-04-19 87 views
1

我有一個基礎文件夾,它有許多文件夾。我想要去每個文件夾,找到一個名爲table_amzn.csv(如果存在)的文件,然後讀取R中的所有文件,並將所有文件放在一個數據幀之後。我已驗證所有文件具有相同的列。我知道如何讀的CSV到R.但是,我怎麼能環比基本文件夾內的所有文件夾和連接的數據r循環瀏覽文件夾並搜索文件,然後連接數據

+2

使用'list.files()'獲得具有指定模式的文件名列表;用'read.csv'將列表應用於所有數據幀中讀入一個列表;使用'do.call(「rbind」,list)'rbind數據' –

+1

'list.files(pattern =「table_amzn.csv」,recursive = TRUE,full.names = TRUE)'應該爬上所有文件夾並搜索特定文件名。結果應該是文件的完整路徑。 –

回答

2

data.frames列表調用此還可以在基礎R是直截了當:

## change `dir` to whatever your 'base folder' actually is 
dir <- '~/base_folder' 
ff <- list.files(dir, pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE) 

out <- do.call(rbind, lapply(ff, read.csv)) 

在你的列是相同的,但不管是什麼原因的情況下(錯字等)有不同的列名,你可以修改如上:

out <- do.call(rbind, lapply(ff, read.csv, header = FALSE, skip = 1)) 
names(out) <- c('stub1', 'stub2') # whatever they should be 
3

下面是最近添加到包rio的實現:

files <- list.files(pattern = "table_amzn.csv", recursive = TRUE, full.names = TRUE) 

devtools::install_github("leeper/rio") 
library(rio) 
df <- import_list(files, rbind = TRUE) 

這會將files中的所有對象加載到單個data.frame對象。另外,如果您有rbind = FALSE則返回

相關問題