在R中读取压缩的.csv文件

在R中读取压缩的.csv文件,r,csv,R,Csv,我一直在努力解决这个问题,但我无法理解如何在R中读取压缩的.csv文件。我可以先解压缩文件,然后再读取它们,但由于解压缩的数据量约为22GB,我想处理压缩的文件更为实际 我基本上有很多.csv文件,我一个接一个地压缩成单个.7z文件。每个文件的名称如下:file1.csv,file2.csv,压缩后分别为:file1.csv.7z,file2.csv.7z,等等 如果我使用以下命令: data <- read.table(unz("substn-20100101.csv.7z", "sub

我一直在努力解决这个问题,但我无法理解如何在R中读取压缩的.csv文件。我可以先解压缩文件,然后再读取它们,但由于解压缩的数据量约为22GB,我想处理压缩的文件更为实际

我基本上有很多.csv文件,我一个接一个地压缩成单个.7z文件。每个文件的名称如下:
file1.csv
file2.csv
,压缩后分别为:
file1.csv.7z
file2.csv.7z
,等等

如果我使用以下命令:

data <- read.table(unz("substn-20100101.csv.7z", "substn-20100101.csv"), nrows=10, header=T, quote="\"", sep=",")

任何帮助都将不胜感激,提前谢谢。

如果我正确理解了问题,至少在Windows操作系统上,您可以使用

为了简单起见,请将7za.exe放入R工作目录(以及7zip文件),创建包含以下文本的.bat文件:

"7za e *.7z -y" 
…而不是在R中运行以下代码:

my_batch <- "your_bat_file_name.bat"
shell.exec(shQuote(paste(my_batch), type = "cmd"))

my_batch首先,如果您的问题是RAM,正如您所说,每个文件都有22G,使用压缩文件无法解决您的问题。例如,read.table之后,所有文件都将加载到内存中。如果您正在使用这些文件进行某种建模,我建议您查看这些文件和包

另一个解决方案是使用具有学术许可证的软件,您可以免费使用。Revolutions R提供大数据功能,您可以使用以下软件包轻松管理这些文件:

甚至还有一种解决方案是使用Postgres++。在Postgres接收数据后,使用PivotalR包直接从R控制台访问该数据并使用MADLib库进行建模

但是,如果您计划使用数据块(例如summary)来完成某些事情,您可以使用包。我将提供一个用例来说明如何做到这一点。获取1988年的数据,并遵循以下代码:

> install.packages('iterators')
> library(iterators)
> con <- bzfile('1988.csv.bz2', 'r')
你会看到这样的情况:

“1988,1,9,61348133114581435,PI,942,NA,70,64,NA,23,17,SYR,BWI,273,NA,NA,NA,0,NA,0,NA,NA,NA,NA”

您将看到下一行,依此类推。请注意,您一次读取一行,因此您没有将所有文件加载到RAM中

如果你想逐行阅读直到文件结束,你可以使用

> tryCatch(expr=nextElem(it), error=function(e) return(FALSE))
比如说。当文件结束时,它返回一个逻辑假。

根据,
readr::read_csv
,fellows将自动解压缩以
.gz
.bz2
.xz
.zip
结尾的文件。虽然未提及
.7z
,但解决方案可能是更改为这些压缩格式之一,然后使用
readr
(这还提供了许多其他好处)。如果您的数据是用
zip
压缩的,您的代码将是:

library(readr)
data <- read_csv("substn-20100101.csv.zip", n_max=10)
库(readr)

这篇文章的数据可能是相关的-你是否正确设置了你的工作目录?你的数据文件需要在那里。大家好@zx8754:谢谢,我已经看过这篇文章了,但是我得到了以下错误:open.connection(文件“rt”):无法打开连接。另外:警告消息:open.connection(文件“rt”):无法打开zip文件'subsn-20100101.7z:C'@Josef Assad:是,我使用下面的代码来设置工作目录,它总是工作的:rm(list=ls(all=TRUE))Sys.setlocale(“LC_TIME”,“C”)#Windows rm(list=ls())main_dir文件存在什么(“subsn-20100101.7z”)
返回什么?似乎没有人指出
7z
!=<代码>邮政编码
。我不知道对7z的内置支持。
> nextElem(it)
> nextElem(it) 
> tryCatch(expr=nextElem(it), error=function(e) return(FALSE))
library(readr)
data <- read_csv("substn-20100101.csv.zip", n_max=10)