首页 > 解决方案 > 拆分文件存在于R中的不同文件夹中

问题描述

我有一个包含许多文件夹的文件夹,每个文件夹包含一个 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 文件获取单独的结果。帮助将不胜感激

标签: rfor-loop

解决方案


利用 -

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 写入正确指定目录,这已通过修改 to 来完成write.csv(a0,paste(i,"cn0.csv",sep="/")),这将填充正确的目标目录。


推荐阅读