打开文件夹中的所有.csv并返回新输出

时间:2015-11-13 13:18:18

标签: r csv directory

我有一个包含许多.csv的文件夹(例如File1.csv,File2.csv等)。我使用下面的代码加载.csv文件并进行一些转换。

path <- "~/files/"
files <- list.files(path=path, pattern="*.csv$")
library("robustX", lib.loc="/Library/Frameworks/R.framework/Versions/3.2/Resources/library")
for(file in files)
{
  perpos <- which(strsplit(file, "")[[1]]==".")
  assign(
    gsub(" ","",substr(file, 1, perpos-1)), 
    data <-read.csv(paste(path,file,sep=""), sep=";"))
    Cb1 <- mvBACON(data[2:7],collect = 4, alpha=0.85, init.sel = c("Mahalanobis"))
    data$distance<-Cb1$dis
    data<-data[-c(13:31)]
    write.csv(data, "~/files/output/FILENAME.csv")
}

我的问题是:

  1. 有没有办法在循环结束时删除每个数据帧?所以我的代码不会将所有文件保存在内存中?
  2. 如何编写新的.csv文件,每个文件与加载的文件同名?例如,将 FILENAME .csv替换为File1.csv,File2.csv等。
  3. 修改 关于第一个问题,我指的是删除file1,file2等,而不是数据。 enter image description here

1 个答案:

答案 0 :(得分:3)

对于您的第一个问题:在循环结束时删除每个数据框,您可以在结束rm(data)之前添加}。它将从全局环境中删除data

对于您的第二个问题,请使用paste0()(即pastesep=''):write.csv(data, paste0("~/files/output/",file))

代码的最后几行应该是:

for (file in files){
    # ...
    data<-data[-c(13:31)]
    write.csv(data, paste0("~/files/output/",file))
    rm(Cb1)
    rm(data)
}