为目录中的所有文件运行R代码,并将所有文件输出到单独的目录中

时间:2015-08-13 06:48:55

标签: r csv directory package

输入csv文件是input1 input2 input3 ....直到input50。现在有R代码在每个文件上运行,相应的csv输出是output1,output2,output3,......直到output50。是否存在一些R函数或R包或R代码,它们一个接一个地开始取文件,在应用了一些R opeartion之后,在septate文件夹中生成相应的输出(逐个)。

2 个答案:

答案 0 :(得分:5)

这将是:

# set working directory to folder with input .csv files
setwd(input_dir)
# get a list of files
input_files <- list.files(input_dir, pattern = "[.]csv")

# loop for reading input and writing an output
for(i in 1:length(input_files)){
  df0 <- read.csv(input_files[i])
  df <-  ... do some operation on df0 ...
  write.csv(df, file = file.path(output_dir, paste0("output", i)))
}

编辑:进行循环校正,谢谢Chetan Arvind Patil。

答案 1 :(得分:1)

假设您有一个函数ProcessCSV来处理一个CSV文件,并给出它的名称:

ProcessCSV=function(fileName) {
   df=read.csv(fileName)
   #your code to process data in data.frame
   write.csv(df, file=paste('output_',filename,collapse='',sep=''))
}

然后,您需要通过手动填写文件名来创建文件列表:

files=list(paste('input', 1:50, '.csv', sep=''))

或列出某个目录中的所有文件:

files=list(list.files(path=".", recursive=T, pattern='.csv'))

之后,使用do.call函数调用函数中的第一个参数,列表中的每个条目(第二个参数):

do.call(ProcessCSV, files)