分割R中不同文件夹中的文件

时间:2019-01-13 08:06:30

标签: r for-loop

我有一个包含许多文件夹的文件夹,每个文件夹包含一个csv文件。我想根据CN将每个文件分割成自己的文件夹。这是文件的位置:

home -> folder   -> f_5324 -> f_5324.csv
                 -> f_5674 -> f_5674.csv
                 -> f_8769 -> f_8769.csv and so on

我想编写一个代码,将第一个文件夹(f_5324)读取csv文件,然后拆分该文件并保存在该文件夹(f_5324)中,然后将第二个文件夹(f_5674)读取csv文件,然后拆分并保存在该文件夹中( f_5674),然后对所有文件夹执行相同的操作。 这是我在R中的代码:-

dir <- "/home/folder"
my_dirs <- list.dirs(dir, recursive = FALSE)

for(i in my_dirs){
    a <- list.files(path = i, full.names = TRUE, recursive = TRUE)
    df <- read.csv(a)
    a0 <-  df[df$CN=="cn=0",]
    a1 <-  df[df$CN=="cn=1",]
    a3 <-  df[df$CN=="cn=3",]
    a4 <-  df[df$CN=="cn=4",]
    write.csv(a0,"cn0.csv")
    write.csv(a1,"cn1.csv")
    write.csv(a3,"cn3.csv")
    write.csv(a4,"cn4.csv")
}

我正在努力,但无法正常工作,它会拆分文件,但会为cn0,cn1,cn3,cn4创建一个文件并覆盖所有结果。请告诉我如何将路径传递到每个文件夹,并获取该文件夹中所有csv文件的单独结果。 帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

使用-

dir <- "/home/folder"
my_dirs <- list.dirs(dir, recursive = FALSE)

for(i in my_dirs){
  a <- list.files(path = i, full.names = TRUE, recursive = TRUE)
  df <- read.csv(a)
  a0 <-  df[df$CN=="cn=0",]
  a1 <-  df[df$CN=="cn=1",]
  a3 <-  df[df$CN=="cn=3",]
  a4 <-  df[df$CN=="cn=4",]
  write.csv(a0,paste(i,"cn0.csv",sep="/"))
  write.csv(a1,paste(i,"cn1.csv",sep="/"))
  write.csv(a3,paste(i,"cn3.csv",sep="/"))
  write.csv(a4,paste(i,"cn4.csv",sep="/"))
}

说明

在最初的实现中,write.csv(a0,"cn0.csv")意味着您正在将名为cn0.csv的csv文件写入当前的工作目录。

下次循环出现时,它将一次又一次地覆盖现有文件。

为避免这种情况,您需要为每次csv写入正确指定目录,方法是将其修改为write.csv(a0,paste(i,"cn0.csv",sep="/")),以填充正确的目标目录。