2016-04-27 11 views
-1

Ich habe ein Verzeichnis mit einer Fülle von Dateien; jede Datei hat die gleiche Struktur:Lesen Sie mehrere Dateien in Datenrahmen

Nodes: 6606 
Edges: 382386 
Average degree: 115.76930063578565 
Average clustering: 0.11213868344294504 
Modularity: 0.6021229084216876 
Giant component: 6598 

Mit der list.files() Funktion ich den Inhalt des Verzeichnisses zu lesen:

files <- list.files(path = "test", pattern = "netstat*", full.names = TRUE) 

Dann benutze ich lapply() Funktion Dateien in die Liste des Datenrahmen zu lesen:

Endlich konvertiere ich die Liste in den Datenrahmen und benenne die Zeilennamen um:

data2 <- t(do.call(data.frame, data1)) 
rownames(data2) <- 1:nrow(data) 

Die endgültigen Daten wie folgt aussehen:

> head(data2) 
    Nodes Edges Average degree Average clustering Modularity Giant component 
1 6606 382386  115.769301   0.11213868 0.6021229   6598 
2 5157 20292  7.869692   0.07020251 0.8195294   5125 
3 5177 20148  7.783658   0.07640135 0.9030172   5102 
4 5689 29559  10.391633   0.08480404 0.7104452   5626 
5 5985 32086  10.722139   0.06803845 0.7189815   5938 
6 5829 26449  9.074970   0.05963236 0.7061715   5770 

Meine Frage: Gibt es eleganteren Weg, das zu tun? Vor allem der letzte Befehl, bei dem ich Zeilen manuell umbenenne, passt irgendwie nicht zu eleganter R-Programmierung.

Antwort

1

Wir könnten die Dateien lesen fread mit und wandeln die list von data.table s auf einem einzigen data.table mit rbindlist

library(data.table) 
rbindlist(lapply(files, fread))