Ich lerne, wie man R-Funktionen schreibt, die ein Verzeichnis voller Dateien lesen und die Anzahl der vollständig beobachteten Fälle in jeder Datei melden.For Loop zeigt nur den letzten Datensatz an
Meine Funktion arbeitet mit einem Fall, aber mit mehreren Fällen zeigt die Schleife nur den letzten Datensatz.
complete <- function(directory, id = 1:332) {
files_list <- list.files(path = directory, full.names = TRUE)
dat <- data.frame()
for (i in id) {
dat <- rbind(dat, read.csv(files_list[i]))
}
nobs <- sum(complete.cases(dat))
id <- i
data.frame(id, nobs)
}
Mein erwartetes Ergebnis, wenn
> complete("specdata", 1:6)
## id nobs
## 1 1 932
## 2 2 711
## 3 3 475
## 4 4 338
## 5 5 586
## 6 6 463
Stattdessen laufen, wenn id = 1: 6, ein data.frame mit zehn Ergebnissen Rückkehr, gibt sie:
> complete("Specdata", 1:6)
id nobs
1 6 3562
ich den Verdacht, Problem ist, dass die Funktion die Werte jedes Mal ersetzt, wenn sie durchläuft. Ich habe SO und anderswo nach Hilfe mit "nur letzte Aufzeichnung" Probleme gesucht und kann keine Lösung aus diesen anderen Antworten herausfinden.
Vielen Dank im Voraus für jede Hilfe. Ich bin ganz neu bei R, da ich mir sicher bin, dass es offensichtlich ist.
@ZheyuanLi: ah ja, verpasste die Daten innerhalb der rbind Anruf. Hoppla. –
Bitte geben Sie Ihre ** erwartete Ausgabe ** (ala [reproduzierbare Beispiele] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)). Ihr Code (wie @ZheyuanLi angegeben) ist vollkommen klar, da Sie explizit einen einzeiligen Datenframe zurückgeben. Wenn Sie 'dat' zurückgeben wollen, dann muss das in der letzten Zeile sein (oder in' return (...) '). – r2evans
@ r2evans - Ich habe den ursprünglichen Post mit meiner erwarteten Ausgabe bearbeitet, entschuldige mich, falls das unklar war und danke für deine Hilfe. – john1607