2012-03-27 4 views
2

Ich versuche, mehrere Dateien in R aus dem Arbeitsverzeichnis zu lesen und lesen möchte gerne aus der siebten Zeile für jede Datei lesen. Ich bin nicht sicher, wie kann ich das tunLesen mehrerer Dateien in einem Verzeichnis beginnend mit einer bestimmten Zeile

Ich fand, wie eine einzelne Datei mit diesem lesen:

data = read.csv(file.choose(), skip = 6) 

oder ich kann mehrere Dateien wie folgt lesen:

j = list.files()   
    d = lapply(j, read.csv) 

könnten Sie bitte Hilf mir, wie kann ich mehrere Dateien ab der 7. Zeile lesen?

+1

Von der Hilfeseite '' optionale Argumente zu FUN'. In Ihrem Beispiel 'read.csv' == FUN, so dass Sie einfach die zusätzlichen Argumente übergeben können, nachdem Sie FUN deklariert haben, also' lapply, j, read.csv, skip = 6) '. Siehe '? Lapply' für weitere Details. – Chase

Antwort

2

Neben @ James Antwort, mit lapply liest nur die Dateien in eine Liste, nicht in eine gemeinsame data.frame. Von deiner Frage aus ist es nicht offensichtlich, wenn du das willst. Aber ich werde es trotzdem der Vollständigkeit halber hinzufügen.

Um identifizieren zu können, zu welcher Datei eine Zeile in der gemeinsamen data.frame ursprünglich gehörte, füge ich oft eine Spalte mit dem Dateinamen hinzu. In Pseudo-Code würde dies in etwa so aussehen:

files = list.files() 
data_list = lapply(files, function(f) { 
    dat = read.csv(fname, skip = 6) 
    dat$fname = fname 
    return(dat) 
    }) 
data_df = do.call("rbind", data_list) 

Alternativ können Sie die ehrfürchtige plyr Bibliothek verwenden, die genau die gleiche Sache tut in:

library(plyr) 
files = list.files() 
data_df = ldply(files, read.csv, skip = 6) 

habe ich nicht diesen Pseudo-Code getestet , so könnte es sein, dass es noch ein paar Mängel gibt. Aber Sie bekommen die Grundidee. Ein Problem könnte beispielsweise sein, dass ldply den Dateinamen nicht automatisch als Spalte hinzufügt. Dann müssen Sie den Funktionsaufruf wie ich mit lapply verwenden. In diesem Fall speichert ldply Sie den do.call Schritt. Beachten Sie, dass plyr einen Fortschrittsbalken (für lange Prozesse) und parallele Verarbeitung unterstützt.

Anmerkung:

  • Ich mag kräftigere Namen als j und d. Dies macht den Code leichter lesbar.
+0

das ist das ist eine Menge erklären mit dem Problem, das ich jetzt habe! :) – Achak

6

Kombinieren Sie einfach die beiden. Sie können in lapply in benannten Argumente an eine Funktion:

d <- lapply(j, read.csv, skip=6) 
+0

Danke, das ist, was ich dachte, ich muss etwas falsch geschrieben haben, ich habe es vorher versucht und nicht funktioniert, jetzt funktioniert es gut :) – Achak

Verwandte Themen