2017-08-20 7 views
1

Ich habe etwa 50-60 Excel-Arbeitsmappen, die in einem Verzeichnis sitzen. Diese Excel-Dateien sind im Großen und Ganzen alle gleich. Es gibt zwei Arbeitsblätter, eines mit Anweisungen, ein anderes mit den gleichen sauberen Daten auf allen Blättern. Spalten/vars A bis J sind die Daten, die ich eigentlich extrahieren möchte, aber ich bin bereit, alles in ein data.frame zu lesen. Die Daten gehen so weit wie A bis N.Verknüpfen von Excel-Dateinamen mit dplyr :: bind_rows .id

Ich schreibe ein Skript, um alle Rohdaten zu extrahieren und so weit so gut. Ein Teil meines Skripts verwendet den Standardansatz von list.files, um ein 'df' von Dateinamen zu erstellen. Dann benutze ich 'lapply', um alle Excel-Dateien in einer Liste zu lesen. Jetzt kommt der Haken.

Ich möchte dplyr :: bind_rows (aber offen für andere Vorschläge), um dann alle Zeilen zusammen zu binden, da sie die gleichen sind und die gleichen Header teilen. Das funktioniert fantastisch in meinem Proof of Concept. Wenn ich das .id-Argument von dplyr :: bind_rows verwende, bekomme ich 1 bis j als die ID var, die der dat.frame-Position innerhalb der Liste entspricht.

files.list <- list.files(pattern='*.xlsx') # list file names in directory 
df.list <- lapply(files.list, read_excel) # read excel into a list of dfs 
df <- bind_rows(df.list, .id = "id") # bind the rows of the dfs together 

Ist es möglich, den tatsächlichen Dateinamen im Gegensatz zu der Position in der Liste zu erhalten, von der der data.frame gelesen wurde? Wenn ja, wie würde ich das tun?

+0

Bitte teilen Sie einige Code. Es ist nicht wirklich klar, was du fragst. Wie erhalten Sie diese Verzeichnispositionen, im Gegensatz zu den Dateinamen? – Abdou

+1

Ich habe nicht downvote. Ich würde zuerst einen Kommentar hinterlassen, bevor ich mich für die Abstimmung entscheiden würde. – Abdou

Antwort

1

Versuchen Sie, die Liste der Datenrahmen mit den Dateinamen umzubenennen, indem Sie setNames; Von ?bind_rows: .ID-Beschriftungen werden aus den benannten Argumenten für bind_rows() entnommen. Wenn eine Liste von Datenrahmen geliefert wird, werden die Bezeichnungen von den Namen der Liste übernommen. Wenn keine Namen gefunden werden, wird stattdessen eine numerische Sequenz verwendet.

files.list <- list.files(pattern='*.xlsx') 
df.list <- setNames(lapply(files.list, read_excel), files.list) 
df <- bind_rows(df.list, .id = "id") 
+1

Gewinner Gewinner Huhn Abendessen! – Zach

+0

Das hat hervorragend funktioniert. Es half mir, den Dateinamen mit den Daten zu verknüpfen, von wo er kam. Große Hilfe bei der Aufbewahrung des Prüfpfads. – Zach

Verwandte Themen