2016-04-15 2 views
0

Ich habe versucht, eine for-Schleife, die etwas für jede der 4 CSV-Dateien ähnlich, aber mit mehr Dateien.R Schleife führen Funktion auf mehrere CSV-Dateien

dat1<- read.csv("female.csv", header =T) 
dat2<- read.csv("male.csv", header =T) 

for (i in 1:2) { 
    message("Female, Male") 
    Temp <- dat[i][(dat[i]$NAME == "Temp"), ] 
    Temp <- Temp[complete.cases(Temp)] 
    print(mean(Temp$MEAN)) 

Allerdings bekomme ich einen Fehler:

Error in Temp$MEAN : $ operator is invalid for atomic vectors

nicht sicher, warum dies funktioniert nicht. Jede Hilfe wäre für das Durchlaufen von CSV-Dateien hilfreich!

+1

Wo schließt sich '}' in der for-Schleife? – WillardSolutions

+1

'dat [1]' ist das erste Element von 'dat'. 'dat1' ist ein anderes Objekt! – jogo

+0

Die beste Möglichkeit, mehrere Dateien zu lesen, ist, sie in eine Liste zu schreiben. Siehe den folgenden Link für ein Beispiel: http://stackoverflow.com/questions/19501040/using-read-csv-in-a-for-loop – lmo

Antwort

0

Ich persönlich denke, der einfachste Weg, dies zu tun mit dem plyr Paket ist:

library(plyr) 
myFiles <- c("male.csv", "female.csv") 
dat <- ldply(myFiles, read.csv) 
dat <- dat[complete.cases(dat), ] 
mean(dat$MEAN) 

Die Art und Weise dies funktioniert, ist, dass Sie zunächst einen Vektor von Dateinamen erstellen. Dann führt die Funktion ldply() die Funktion read.csv() für den Vektor von Dateinamen aus und konvertiert die Ausgabe automatisch in einen data.frame. Dann machen Sie die complete.cases() und mean() wie gewohnt.

Edit:

Aber wenn Sie den Mittelwert jeder Datei soll hier dann ist eine Möglichkeit, es zu tun:

# create a vector of files 
myFiles <- c("male.csv", "female.csv") 

# create a function that properly handles ONLY ONE ELEMENT 
readAndCalc <- function(x){   # pass in the filename 
    tmp <- read.csv(x)     # read the single file 
    tmp <- tmp[complete.cases(tmp), ] # complete.cases() 
    mean(tmp$MEAN)      # mean 
} 

x <- "male.csv" 
readAndCalc(x)       # test with ONE file 

sapply(myFiles, readAndCalc)   # run with all your files 

Die Art und Weise dies funktioniert, ist, dass Sie zunächst einen Vektor von Dateinamen erstellen, einfach wie früher. Dann erstellen Sie eine Funktion, die jeweils nur EINE Datei verarbeitet. Dann können Sie testen, ob die Funktion mit der gerade erstellten Funktion readAndCalc funktioniert. Schließlich tun Sie es für alle Ihre Dateien mit der Funktion sapply(). Ich hoffe, das hilft.

+0

Ich kann sehen, dass Sie ein Anfänger bei R sind. Ich hatte das gleiche Probleme zu Beginn des Lernens R auch. Dies ist normal, bis du anfängst "in die Rinne zu denken". Keine Bange. Sie werden die Idee bald bekommen. – hackR

+0

Danke, das funktioniert, aber es scheint alle Dateien zu kombinieren. Ich möchte für jede der Dateien eine separate Ausgabe erhalten. Deshalb dachte ich daran, sie durchzublättern. – user6210879