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