web-dev-qa-db-fra.com

R Lecture dans un fichier de données Zip sans le décompresser

J'ai un très gros fichier Zip et j'essaie de le lire en R sans le décompresser de la manière suivante:

temp <- tempfile("Sales", fileext=c("Zip"))
data <- read.table(unz(temp, "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")

Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
  cannot open Zip file 'C:\Users\xxx\AppData\Local\Temp\RtmpyAM9jH\Sales13041760345azip'
53
laiboonh

Si votre fichier Zip s'appelle Sales.Zip et ne contient qu'un fichier appelé Sales.dat, je pense que vous pouvez simplement procéder comme suit (en supposant que le fichier se trouve dans votre répertoire de travail):

data <- read.table(unz("Sales.Zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
35
plannapus

Inutile d'utiliser unz, car read.table peut gérer le fichier compressé directement:

data <- read.table("Sales.Zip", nrows=10, header=T, quote="\"", sep=",")

Voir ce post

14
user5496072

Les méthodes du paquet readr supportent également les fichiers compressés si le suffixe indique la nature du fichier, c'est-à-dire que les fichiers se terminant par .gz, .bz2, .xz ou .Zip seront automatiquement décompressés.

require(readr)
myData <- read_csv("foo.txt.gz")
6
Holger Brandl

Si vous avez installé zcat sur votre système (c'est le cas de linux, macos et cygwin), vous pouvez également utiliser:

zipfile<-"test.Zip"
myData <- read.delim(pipe(paste("zcat", zipfile)))

Cette solution présente également l’avantage qu’aucun fichier temporaire n’est créé.

1
Holger Brandl

La fonction gzfile ainsi que read_csv et read.table peuvent lire les fichiers compressés.

library(readr)
df = read_csv(gzfile("file.csv.gz"))

library(data.table)
df = read.table(gzfile("file.csv.gz"))

read_csv du paquet readr peut lire les fichiers compressés même sans utiliser la fonction gzfile. 

library(readr)  
df = read_csv("file.csv.gz")

read_csv est recommandé car il est plus rapide que read.table

0
Natheer Alabsi

Dans cette expression tu as perdu un point

temp <- tempfile("Sales", fileext=c("Zip"))

CA devrait etre:

temp <- tempfile("Sales", fileext=c(".Zip"))
0
Jorge Moreno