批量读取R中的压缩CSV文件

时间:2017-03-24 12:46:32

标签: r csv zip

新手在这里。我有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,并且没有作为程序员的经验。

1 个答案:

答案 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.csvout-2.csvout-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)