eine ZIP Datei in R einlesen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

eine ZIP Datei in R einlesen

Beitrag von Bill »

Hallo Leute,

gibt es eine Möglichkeit in R eine nicht entpackte ZIP Datei einzulesen?

Ich habe diese ZIP Datei bereits in meinem Arbeitsverzeichnis zu stehen und möchte sie nun einlesen, ohne sie vorher zu entpacken.
Hat jemand eine Idee wie das funktioniert?

Ich wäre sehr dankbar

Freundliche Grüße & schöne Ostern wünscht

Bill
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: eine ZIP Datei in R einlesen

Beitrag von jogo »

Hallo Bill,

ja, es geht, siehe
https://stackoverflow.com/a/3053883/5414452
(den download-Teil benötigst Du nicht)

Gruß, Jörg
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

Re: eine ZIP Datei in R einlesen

Beitrag von Bill »

Hallo Jörg,

ich habe meinen Code entsprechend meiner Datei angepasst:

Code: Alles auswählen

temp <- tempfile()
data <- read.table(unz(temp, "datei_2018_stata.dat"))
unlink(temp)/code]

Dies führte dann zu folgender Fehlermeldung:

[code]Fehler in open.connection(file, "rt") : kann Verbindung nicht öffnen
Zusätzlich: Warnmeldung:
In open.connection(file, "rt") :
  kann Zipfile '/var/folders/1_/34wk2lsx01bgtnykry6wrpc80000gn/T//RtmpgtjjYs/file151a87f9b4397' nicht öffnen


P.S.: in der read.table() Funktion wird am Ende eine dat. Datei eingesetzt. Wieso eigentlich? Ich habe doch eine ZIB Datei im Arbeitsverzeichnis!?


Liebe Grüße

Bill
bigben
Beiträge: 2894
Registriert: Mi Okt 12, 2016 9:09 am

Re: eine ZIP Datei in R einlesen

Beitrag von bigben »

Hallo Bill,

ich nehme an, Du hast eine ZIP-Datei im Arbeitsverzeichnis liegen und keine ZIB-Datei.

Wenn Du eine ZIP-Datei im Arbeitsverzeichnis liegen hast, warum kommt dann kein Pfad hin zu einer ZIP-Datei in Deinem angepassten Code vor?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

Re: eine ZIP Datei in R einlesen

Beitrag von Bill »

Hallo Bernhard,

ich habe mich gerade nochmal in die unzip() Funktion eingelesen und nun folgendes codiert:

Code: Alles auswählen

 zipfileinfos <- unzip(zipfile = "/Users/Bill/Rstudio-workspace/Statistical Programming/2018_stata.zip", list=TRUE)
data <- read.table(unz(filename = zipfileinfos$Name, description = "/Users/Bill/Rstudio-workspace/Statistical Programming/2018_stata.zip"))
  
Der Filename in der ZIP Datei ist eine .dta Datei.

Nun bekomme ich als Output folgendes Kryptisches, was ich nicht erwartet habe:

Code: Alles auswählen

 > data
                    V1
1            q\002\001
2 \xfb\xfb\xfb\xfb\xfb
 

Hängt das vielleicht damit zusammen, dass der Filename in der ZIP Datei eine .dta Datei ist??


Liebe Grüße

Bill
bigben
Beiträge: 2894
Registriert: Mi Okt 12, 2016 9:09 am

Re: eine ZIP Datei in R einlesen

Beitrag von bigben »

Die Zusatzpakete foreign und haven haben jeweils Funktionen, die versuchen, Statafiles für R zu entziffern. Ich kann da auch nur googlen.
read.table kann keine Stata-files lesen.

LG Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: eine ZIP Datei in R einlesen

Beitrag von jogo »

Hallo Bill,

bei mir funktioniert folgendes:

Code: Alles auswählen

setwd("/home/...")
dir()
unzip("mein.zip", list=TRUE)

Dat <- read.table(unz("mein.zip", filename = "df_4.csv"), header=TRUE, sep=";")

head(Dat)
(Ich hatte zwei die zwei CSV-Dateien in diesem Verzeichnis in ein ZIP-Archiv gepackt.)
Hier der output:

Code: Alles auswählen

> setwd("/home/...")
> dir()
[1] "df_2.csv" "df_4.csv" "mein.zip"
> unzip("mein.zip", list=TRUE)
      Name Length                Date
1 df_2.csv  40745 2018-10-15 08:17:00
2 df_4.csv  21676 2018-10-15 08:18:00
> 
> Dat <- read.table(unz("mein.zip", filename = "df_4.csv"), header=TRUE, sep=";")
> 
> head(Dat)
  Class Group   Hoehen Hoehenklassen Dichte
1   100     4 974.0059             4      2
2   100     4 863.6337             3      3
3   100     4 768.8760             3      3
4    70     4 799.5183             3      3
5    70     4 834.2877             3      3
6    70     4 888.9432             3      3
Gruß, Jörg
Bill
Beiträge: 35
Registriert: Fr Mär 06, 2020 8:04 pm

Re: eine ZIP Datei in R einlesen

Beitrag von Bill »

Hallo Jörg,

danke erstmal für deine Ausführungen.

Leider kann ich die read.table() Funktion zum Einlesen nicht benutzen, da mein filename Argument eine .dta Datei beinhaltet.

Wenn ich nun jedoch anstatt der read.table Funktion die Funktion read.dta() aus dem foreign Paket nehme, erscheint die Fehlermeldung:

Code: Alles auswählen

Fehler in read.dta(unz(filename = "GSS2018.dta", description="2018_stata.zip")) : 
  first argument must be a file name
Wahrscheinlich liegt da der Hase im Pfeffer? Also das ich eben nicht über die read.table() Funktion einlesen kann, sondern die read.dta() nehmen muss?!

Inzwischen habe ich die ZIP Datei manuell entpackt und dann entsprechend über read.dta() eingelesen.


Liebe Grüße

Bill
jogo
Beiträge: 2093
Registriert: Fr Okt 07, 2016 8:25 am

Re: eine ZIP Datei in R einlesen

Beitrag von jogo »

Hallo Bill,
Bill hat geschrieben: Mi Apr 15, 2020 6:38 pm Leider kann ich die read.table() Funktion zum Einlesen nicht benutzen, da mein filename Argument eine .dta Datei beinhaltet.

Wenn ich nun jedoch anstatt der read.table Funktion die Funktion read.dta() aus dem foreign Paket nehme, erscheint die Fehlermeldung:

Code: Alles auswählen

Fehler in read.dta(unz(filename = "GSS2018.dta", description="2018_stata.zip")) : 
  first argument must be a file name
Wahrscheinlich liegt da der Hase im Pfeffer?
ja, nicht jede Funktion kann sogenannte connections verwenden. read.table() kann es, read.dta() offensichtlich nicht.
(Für Einzelheiten die Doku lesen.)
Inzwischen habe ich die ZIP Datei manuell entpackt und dann entsprechend über read.dta() eingelesen.
genau so.
Wenn Du möchtest, kannst die Sache mit dem tempfile nutzen aus der zuerst verlinkten Antwort.

Gruß, Jörg
Antworten