datensätze - r cbind column name



Verwenden von rbind() zum Kombinieren mehrerer Datenrahmen zu einem größeren data.frame innerhalb von lapply() (2)

Eine andere Option ist fread von data.table

library(data.table)
rbindlist(lapply(files, fread, skip=3))

Ich benutze R-Studio 0.99.491 und R Version 3.2.3 (2015-12-10). Ich bin ein relativer Neuling für R, und ich würde etwas Hilfe schätzen. Ich mache ein Projekt, bei dem ich versuche, die Serverprotokolle auf einem alten Medienserver zu verwenden, um zu ermitteln, auf welche Ordner / Dateien im Server noch zugegriffen wird und welche nicht, damit mein Team weiß, welche Dateien zu migrieren sind. Jedes Protokoll ist für einen Zeitraum von 24 Stunden, und ich habe ungefähr ein Jahr lang Protokolle, also sollte ich in der Lage sein, den gesamten Zugriff im vergangenen Jahr zu sehen.

Meine ideale Ausgabe ist, eine Baumstruktur oder ein Diagramm zu erhalten, die mir die Ordner auf unserem Server zeigen, die verwendet werden. Ich habe herausgefunden, wie man ein Log (einen Tag) in R als data.frame liest und dann das data.tree-Paket in R benutzt, um das in einen Baum zu verwandeln. Nun möchte ich rekursiv nacheinander alle Dateien im Verzeichnis durchsuchen und sie zu diesem ursprünglichen data.frame hinzufügen, bevor ich den Baum erstelle. Hier ist mein aktueller Code:

#Create the list of log files in the folder
files <- list.files(pattern = "*.log", full.names = TRUE, recursive = FALSE)
#Create a new data.frame to hold the aggregated log data
uridata <- data.frame()
#My function to go through each file, one by one, and add it to the 'uridata' df, above
lapply(files, function(x){
    uriraw <- read.table(x, skip = 3, header = TRUE, stringsAsFactors = FALSE)
    #print(nrow(uriraw)
    uridata <- rbind(uridata, uriraw)
    #print(nrow(uridata))
})

Das Problem ist, dass, egal was ich versuche, der Wert von 'Uridata' innerhalb der Lapply-Schleife nicht gespeichert / außerhalb der Lapply-Schleife übergeben wird, aber bei jedem Durchlauf der Schleife irgendwie überschrieben wird. Anstatt also einen großen data.frame zu erhalten, erhalte ich nur den Inhalt der letzten uriraw-Datei. (Deshalb gibt es diese beiden kommentierten Druckbefehle innerhalb der Schleife; ich habe getestet, wie viele Zeilen es in den Datenrahmen gab, jedes Mal, wenn die Schleife lief.)

Kann jemand klären, was ich falsch mache? Wieder möchte ich ein großes data.frame am Ende, das den Inhalt jeder der (derzeit sieben) Protokolldateien in dem Ordner kombiniert.


Sie können map_df aus purrr Paket purrr anstelle von lapply , um alle Ergebnisse direkt als lapply zu kombinieren.

map_df(files, read.table, skip = 3, header = TRUE, stringsAsFactors = FALSE)




rbind