Wie eine Schleife durch einen Ordner mit CSV-Dateien in R
Ich habe einen Ordner mit einer Reihe von CSV-Dateien, die mit dem Titel "yob1980", "yob1981", "yob1982" etc.
Muss ich das mit einer for-Schleife durchläuft jede Datei und Ihr Inhalt in einen Daten-frame - Spalten in der Daten-frame sein sollte "1980", "1981", "1982" etc
Hier ist was ich habe:
file_list <- list.files()
temp = list.files(pattern="*.txt")
babynames <- do.call(rbind,lapply(temp,read.csv, FALSE))
names(babynames) <- c("Name", "Gender", "Count")
Ich fühle mich wie ich eine for-Schleife, aber ich bin mir nicht sicher, wie eine Schleife durch die Dateien. Jeder Punkt, der mich in die richtige Richtung?
- Sind CSV-Dateien eine Spalte mit Dateien ohne Header? Und Sie entsprechen denselben Datensatz-ids?
- Was haben Sie bereits führen Sie eine Schleife durch alle Dateien (
lapply
führt eine implizitefor
Schleife über alle Dateien). Und Sie sind bereits die Herstellung einer einzelnen Daten-frame (do.call(rbind, ....)
). Was ist die Frage? - die CSV-Dateien haben keinen Header und es gibt drei Säulen, die im inneren enthalten Sie einen Namen, Geschlecht, und die Anzahl der Namen, die
- Ich versuche, um eine Spalte hinzuzufügen, um den dataframe enthält das Jahr, in dem der name entspricht.
- Was ist
file_list
für?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Lieblings-Weg, dies zu tun ist mit
ldply
von derplyr
Paket. Es hat den Vorteil der Rücksendung bei einem dataframe, so brauchen Sie nicht zu tun rbind Schritt danach:Als zusätzlichen Vorteil, Sie können multi-thread-import sehr leicht, so dass das importieren von großen multi-Datei Datensätze ein bisschen schneller:
Änderung der oben geringfügig um ein
Year
Spalte in der resultierenden data Frames, erstellen Sie eine Funktion zuerst, dann führen Sie diese Funktion innerhalbldply
in der gleichen Weise, die Sie würde ausführenread.csv
Dieser geben Sie Ihre Daten in eine übersichtliche und saubere Art, die, wie ich empfehlen würde, sich vorwärts zu bewegen von hier aus. Während es möglich ist, dann trennen Sie jedes Jahr die Daten in seine eigene Spalte, ist es wahrscheinlich nicht der beste Weg zu gehen.
Hinweis: je nach Ihren Einstellungen, kann es eine gute Idee zu konvertieren, die
Year
Spalte zu sagen,integer
Klasse. Aber das ist bis zu Ihnen.rbind
von @Michael Griffiths' - Methode? Das sollte die Konvertierung zu einem Daten-frame.append
können, sondern eine neue Spalte für jede Datei. Für die meisten Datensätze, das ist keine gute Idee. Sind Ihrename
undgender
Spalten die gleiche für jede Datei?Betrachten eine anonyme Funktion innerhalb einer
lapply()
:Mit purrr
Einen
for
- Schleife besser geeignet sein könnten alslapply
in diesem Fall.