r - 拆分文件存在于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 文件获取单独的结果。帮助将不胜感激
解决方案
利用 -
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="/"))
,这将填充正确的目标目录。
推荐阅读
- mysql - MySQL - 基于数量和 ID 的数据删除
- javascript - Node JS 防止用户删除其他用户的产品
- python - 无法使用 python zipfile 库解压缩带有密码的 .zip 文件
- python - Tensorflow io.gfile.GFile 错误 - Curl 返回错误代码 60 - 如果签名检查失败。这可能是因为时间偏差
- angular - 在 Angular 中构建后无法加载路由模块
- javascript - 使用 AJAX 将变量传递到页面并在 PHP 中返回这些变量
- javascript - 脚本标签未同步呈现
- c# - 使用 VS2019 / .Net Core 3.1 的“生成单个文件”发布选项时,是否可以在部署后保持 appsettings.json 可编辑?
- javascript - fooplugins/Footable - 尝试从 JSON 加载表时“无法读取属性 'name' of null”
- c# - 如何使用 C# 在 WMI 中读取驱动程序属性扩展配置 ID