新手在这里。我有1000个压缩的CSV文件,我需要阅读和行绑定。我的问题类似于this one,但有两点不同:
a)文件名具有不同的长度而不是顺序的,以这种形式:
alter table Rapport add constraint FK_appartenir foreign key (/*add here your key column*/)
references OrganismeD_accueil (idOrg) on delete restrict on update restrict;
我有两个向量,"members_[name of company]_[state code].csv"`
和company
,带有所需的代码。所以,我用这段代码构建了我需要的所有文件的向量:
states
因此它拥有我需要的所有文件名(20家公司X 50州)。但我迷失了如何循环所有的zip文件。这些zip文件中还有10个其他CSV,但我只需要上面描述的那些。
b)解压缩后,文件会扩展为目录结构,如下所示:
combinations <- expand.grid(company, states)
csvfiles <- paste0("members_" ,
combinations$Var1, "_",
combinations$Var2,".csv" )
但是当我尝试使用
从zip文件中读取CSV时/files/member_database/members/state/members_[name of company]_[state code].csv
它返回'无法打开连接'消息。添加data <- read.csv(unz("members_GE_FL.zip", "members_GE_FL.csv"), header=F, sep=":")
之类的路径也不起作用。
然后,我不确定命令./files/member_database/members/state/members_GE_FL.csv
是否会让它读取我read.csv(unz(csvfiles...
中的名字,但我不确定是不是因为上述或者命令是错误的共
感谢任何帮助 - 我应该看看的见解,文档等等。同样,我并不是想让人们去做我的工作。当我输入时,我打开了37个标签(很多来自SO),并且已经花了22个小时单独使用这个东西。我已经了解了this post和其他人如何阅读ZIP中的文件以及this post如何提取和导入数据。不过,我无法将它们拼凑在一起。我几个月前才开始使用R,并且没有作为程序员的经验。
答案 0 :(得分:1)
我怀疑遗失的是档案中文件的正确路径:"members_GE_FL.csv"
和"./files/member_database/members/state/members_GE_FL.csv"
都不起作用。
但是"files/member_database/members/state/members_GE_FL.csv"
(没有初始点)应该。
为了完整起见,这是一个完整的例子:
让我们创建一些虚拟数据,三个名为out-1.csv
,out-2.csv
,out-3.csv
的文件并将其压缩到dummy-archive.zip
中:
if (!dir.exists("data")) dir.create("data")
if (!dir.exists("data/dummy-files")) dir.create("data/dummy-files")
for (i in 1:3)
write.csv(data.frame(foo = 1:2, bar = 7:8), paste0("data/dummy-files/out-", i, ".csv"), row.names = FALSE)
zip("data/dummy-archive.zip", "data/dummy-files")
现在让我们假设我们正在寻找其他3个文件,其中两个在档案中,一个不在:
files_to_find <- c("out-2.csv", "out-3.csv", "out-4.csv")
列出档案中的文件,并为清晰起见命名:
files_in_archive <- unzip("data/dummy-archive.zip", list = TRUE)$Name
files_in_archive <- setNames(files_in_archive, basename(files_in_archive))
# dummy-files out-2.csv
# "data/dummy-files/" "data/dummy-files/out-2.csv"
# out-3.csv out-1.csv
# "data/dummy-files/out-3.csv" "data/dummy-files/out-1.csv"
找到我们在档案中寻找的文件索引,并按照您的意图阅读(使用read.csv(unz(....))
):
i <- basename(files_in_archive) %in% files_to_find
res <- lapply(files_in_archive[i], function(f) read.csv(unz("data/dummy-archive.zip", f)))
# $`out-2.csv`
# foo bar
# 1 1 7
# 2 2 8
#
# $`out-3.csv`
# foo bar
# 1 1 7
# 2 2 8
清理:
unlink(c("data/dummy-files/", "data/dummy-archive.zip"), recursive = TRUE)