Eine raschere und prägnante tidyverse
(aka: dplyr
/purrr
) Lösung:
tbl <-
list.files(pattern="*.csv") %>%
map_df(~read_csv(.))
Wenn die Typumwandlung frech ist, können Sie alle Spalten dazu zwingen, als Zeichen zu fungieren.
tbl <-
list.files(pattern="*.csv") %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
Wenn Sie wollen, in Unterverzeichnisse tauchen Sie Ihre Liste von Dateien zu konstruieren, um schließlich zu binden, dann müssen Sie die Pfadnamen enthalten, sowie die Dateien mit ihren vollständigen Namen in der Liste registrieren. Dadurch kann die Bindungsarbeit außerhalb des aktuellen Verzeichnisses ausgeführt werden. (Denken an den vollen Pfadnamen als wie Pässe Betriebs Bewegung über Verzeichnis ‚Grenzen‘ zu erlauben, zurück.)
tbl <-
list.files(path = "./subdirectory/",
pattern="*.csv",
full.names = T) %>%
map_df(~read_csv(., col_types = cols(.default = "c")))
Wie Hadley beschreibt here (etwa in der Mitte):
map_df(x, f)
ist das Gleiche wie do.call("rbind", lapply(x, f))
aber unter der Haube ist viel effizienter.
und ein Dankeschön an Jake Kaupp für mich here zu map_df()
einzuführen.
Bonus Feature-Hinzufügen von Dateinamen in den Datensätzen pro Niks Feature Request in den Kommentaren unten:
* original filename
zu jedem Datensatz hinzufügen.
Code erklärt: eine Funktion zum Anhängen des Dateinamens an jeden Datensatz während der ersten Lesung der Tabellen. Verwenden Sie dann diese Funktion anstelle der -Funktion.
read_plus <- function(flnm) {
read_csv(flnm) %>%
mutate(filename = flnm)
}
tbl_with_sources <-
list.files(pattern="*.csv",
full.names = T) %>%
map_df(~read_plus(.))
(Die Schublade gesteckt und Unterverzeichnis Handhabung Ansätze können auch innerhalb der read_plus()
funktioniert auf die gleiche Art und Weise wie in den zweiten und dritten Varianten vorschlagen oben behandelt werden.)
Dank! Das funktioniert sehr gut ... Wie würde ich jede Datei, die ich gerade importiert habe, benennen, damit ich sie leicht aufrufen kann? –
Wenn Sie uns die ersten Zeilen einiger Ihrer Dateien zeigen können, haben wir vielleicht ein paar Vorschläge - bearbeiten Sie Ihre Frage dazu! – Spacedman
Der obige Code funktioniert perfekt, um sie als einzelne Objekte zu importieren, aber wenn ich versuche, eine Spalte aus dem Datensatz aufzurufen, erkennt sie es nicht, da es nur ein einzelnes Objekt ist. dh meine Version des obigen Codes ist: setwd ('C:/Users/neu/Desktop/Dives/0904_003') Temp <-list.files (pattern = "*. csv") ddives <- lapply (temp, read.csv) So, jetzt Jede Datei heißt ddives [n], aber wie würde ich eine Schleife schreiben, um alle Datenrahmen und nicht einzelne Objekte zu erstellen? Ich kann dies einzeln mit dem data.frame-Operator erreichen, bin mir aber nicht sicher, wie ich das umwandeln kann. @mrdwab –