通过目录和文件循环并将文件保存在具有不同名称的新目录中

时间:2017-02-15 09:57:59

标签: r loops directory subdirectory

我遇到了以下问题,到目前为止我没有找到合适的答案。

我在以下目录中的子文件夹中存储了大量数据集:

C:/Users/Desktop/Data Generation

子文件夹正在遵循这种模式:

/Model 1/Model_1_250skew1mar1 

模型可能从1变为3;以及250到750;偏斜1到3;和3月3日。

例如:/Model 3/Model_3_750skew2mar2 or /Model 2/Model_2_250skew3mar1

在这些子文件夹中,我获得了数据集:M1_1M1_1000或模型2 M2_1M2_1000

现在我想获取我的数据集:M1_1M1_1000并替换缺少的值,并根据我获取它们的位置将这些数据集保存在新目录中:

C:/Users/Desktop/Data Generation/   NA   /Model 1/Model_1_250skew1mar1

我可以使用以下代码为我的一个子目录执行此操作:

files_M_neu <- list.files(path="C:/Users/Desktop/Data Generation/Model 1/Model_1_250skew1mar1", 
                       pattern="M1_*[^list].dat", recursive=TRUE, full.names=TRUE)

dir.create("C:/Users/Desktop/Data Generation/NA")
dir.create("C:/Users/Desktop/Data Generation/NA/Model 1")
dir.create("C:/Users/Desktop/Data Generation/NA/Model 1/Model_1_250skew1mar1")

for(i in 1:length(files_M_neu)){
  data <- read.table(files_M_neu[i], header=TRUE)
  fix_missing <- function(x) {
    x[x == 999] <- NA
    x
  }
  data <- fix_missing(data)
  write.table(data, paste("C:/Users/Desktop/Data Generation/NA/Model 1/Model_1_250skew1mar1/data[",i,"].dat"), 
              sep="\t", row.names = FALSE, col.names = FALSE)
  rm(data)
}

我如何自动执行此过程,以便我没有上述代码54次?我想要一个干净的方法:获取我的文件,替换缺失并根据我从中获取文件的目录保存文件。

正如你可能猜到的那样,我是R的新手,但我现在尝试了不同的东西,而且我没有办法让你更接近解决方案。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,它使用list.dirs()递归读取wd下的所有目录,然后在wd / NA /下创建相同的目录树,最后使用dir()或{{ 1}}具有完整的相对名称来处理文件并将它们保存在wd / NA /每个目录下:

list.files()