5 praktische Optionen im Rahmen von R data.table

Wie alle Funktionen im Paket data.table R ist fread schnell. Sehr schnell. Aber es gibt mehr zu tun als Geschwindigkeit. Es hat mehrere hilfreiche Funktionen und Optionen beim Importieren externer Daten in R. Hier sind fünf der nützlichsten.

Hinweis: Wenn Sie mitmachen möchten, laden Sie die CSV-Datei der New York Times mit den täglichen Covid-19-Fällen des US-Bundesstaates unter //github.com/nytimes/covid-19-data/raw/master/us-counties herunter. csv.

Verwenden Sie die Option "Fread's Nrows"

Ist Ihre Datei groß? Möchten Sie die Struktur überprüfen, bevor Sie das Ganze importieren - ohne es in einem Texteditor oder Excel öffnen zu müssen? Verwenden Sie die nrowsOption von fread , um nur einen Teil einer Datei zur Erkundung zu importieren .

Der folgende Code importiert nur die ersten 10 Zeilen der CSV.

mydt10 <- fread ("us-county.csv", nrows = 10)

Wenn Sie nur Spaltennamen ohne Daten anzeigen möchten, können Sie verwenden nrows = 0

Verwenden Sie die Auswahloption von fread

Sobald Sie die Dateistruktur kennen, können Sie auswählen, welche Spalten importiert werden sollen . Mit der selectOption von fread können Sie Spalten auswählen, die Sie behalten möchten. selectnimmt einen Vektor von entweder Spaltennamen oder Spaltenpositions - Nummern . Wenn Namen, müssen sie wie die meisten Vektoren von Zeichenketten in Anführungszeichen gesetzt werden:

mydt <- fread ("us-county.csv",

select = c ("Datum", "Landkreis", "Bundesland", "Fälle"))

Zahlen brauchen wie immer keine Anführungszeichen:

mydt <- fread ("us-county.csv", select = c (1,2,3,5))

Sie können ein R-Objekt mit einem Vektor von Spaltennamen in fread verwenden, wie Sie in dieser nächsten Codegruppe sehen können. Ich erstelle einen Vektor my_cols mit Datum, Landkreis, Bundesland und Fällen. dann benutze ich diesen Vektor in fread.

my_cols <- c ("Datum", "Landkreis", "Bundesland", "Fälle")

mydt <- fread ("us-county.csv", select = my_cols)

Das Gegenteil von selectist drop. Sie können alle Spalten außer den von Ihnen angegebenen Spalten importieren drop, z. B.:

mydt <- fread ("us-Counties.csv", drop = c ("Fips", "Todesfälle"))

Wie bei select, dropnimmt einen Vektor von Spaltennamen oder numerischer Positionen. 

Verwenden Sie Fread mit Grep

Wenn Sie mit Unix vertraut sind, können Sie  Befehlszeilentools direkt in fread ausführen . Wenn ich beispielsweise nur kalifornische Daten haben wollte, konnte ich grep verwenden, um nur Zeilen zu importieren, die den Text "California" enthalten. Beachten Sie, dass hierdurch jede ganze Zeile als Textzeichenfolge und nicht als bestimmte Spalte durchsucht wird. Daher müssen Ihre Daten in einem Format vorliegen, in dem dies sinnvoll ist.

ca <- fread ("grep California us-county.csv")

Leider versteht grep die Spaltennamen der Originaldatei nicht, sodass Sie Standardnamen erhalten.

Kopf (ca) V1 V2 V3 V4 V5 V6 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles Kalifornien 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020 -01-27 Los Angeles Kalifornien 6037 1 0 5: 2020-01-27 Orange Kalifornien 6059 1 0 6: 2020-01-28 Los Angeles Kalifornien 6037 1 0

Mit fread können wir jedoch Spaltennamen mit der col.namesOption angeben . Ich kann die Namen basierend auf den Namen von mydt10 festlegen, die ich oben erstellt habe.

ca Kopf (ca) Datum County State Fips Fälle Todesfälle 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles Kalifornien 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020-01-27 Los Angeles Kalifornien 6037 1 0 5: 2020-01-27 Orange Kalifornien 6059 1 0 6: 2020-01-28 Los Angeles Kalifornien 6037 1 0

Mit der -EOption grep können wir auch reguläre Ausdrücke verwenden, um komplexere Suchvorgänge durchzuführen, z. B. die Suche nach vier Zuständen gleichzeitig. 

States4 <- fread (cmd = "grep -E 'Texas | Arizona | Florida | South Carolina' us-county.csv",

col.names = names (mydt10))

Nochmals eine Erinnerung: Hierbei wird nach jedem dieser Statusnamen an einer beliebigen Stelle in der Zeile gesucht , nicht nur in der Statusspalte. Wenn Sie den obigen Code ausführen und überprüfen, mit welchen Bundesstaaten die Ergebnisse enthalten sind unique(states4$state), werden in der Spalte "Bundesstaaten" Oklahoma und Missouri sowie Texas, Arizona, Florida und South Carolina angezeigt. Das liegt daran, dass sowohl Oklahoma als auch Missouri Grafschaften namens Texas haben.

Grep während des Dateiimports ist also eine Möglichkeit, viele Daten, die Sie nicht möchten, aus einem sehr großen Datensatz herauszufiltern. Aber es garantiert nicht, dass Sie nur das bekommen, was Sie wollen. Nach dieser Art des Imports sollten Sie immer noch gezielt nach Spaltendaten filtern, um sicherzustellen, dass Sie nichts Unerwartetes erhalten.

Verwenden Sie die Option colClasses von fread

Sie können Spaltenklassen während des Imports festlegen - für nur wenige Spalten, nicht für jede. Beispielsweise wird die Datumsspalte in diesen Daten als Zeichenfolge angezeigt, obwohl sie im Format Jahr-Monat-Tag vorliegt.  Mit der Option können wir die Spalte Datum auf den Datentyp Datum während des Imports setzen colClasses

mydt <- fread ("us-county.csv", colClasses = c ("date" = "Date"))

Jetzt sind Daten Daten.

> str (mydt) Klassen 'data.table' und 'data.frame': 322651 obs. von 6 Variablen: $ Datum: Datum, Format: "2020-01-21" "2020-01-22" "2020-01-23" ... $ Grafschaft: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ state: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ Fälle: int 1 1 1 1 1 1 1 1 1 1 ... $ Todesfälle: int 0 0 0 0 0 0 0 0 0 0 ...

Verwenden Sie fread für komprimierte Dateien

Sie können eine komprimierte Datei importieren, ohne sie zuvor zu entpacken . fread kann gz- und bz2-Dateien direkt importieren, z  mydt <- fread("myfile.gz"). Wenn Sie eine Zip-Datei importieren müssen, können Sie sie mit dem unzipSystembefehl in fread mithilfe der Syntax entpacken  mydt <- fread(cmd = 'unzip -cq myfile.zip').

Weitere R-Tipps finden Sie auf der Seite Mehr mit R tun.