2017-01-20 4 views
3

Ich versuche, Informationen aus mehreren Datendateien zu extrahieren - genauer gesagt, wie viele vollständige Datensätze in jeder Datei vorhanden sind.Schleife gibt kumulatives Ergebnis zurück, nicht diskret

Hier ist, was ich geschrieben habe:

complete <- function(directory, id=1:332) { 
files_senscomp <- list.files(directory, full.names=TRUE)[id] 
pre_dat <- data.frame() 
full_dat <- data.frame() 

for (i in seq(files_senscomp)) { 
    pre_dat <- rbind(pre_dat, read.csv(files_senscomp[i])) 
    nobs <- sum(complete.cases(pre_dat)) 
    id <- i 
    full_dat <- rbind(full_dat,data.frame(id,nobs)) 
} 
full_dat 
} 

Was es gibt, aber kumulativ. Und die IDs sind falsch. Hier sind die Funktion in Aktion und das Ergebnis:

> complete("specdata", 40:45) 
    id nobs 
1 1 21 
2 2 248 
3 3 308 
4 4 382 
5 5 665 
6 6 1089 

Warum funktioniert das nicht die IDs zurückgeben 40-45, zusammen mit einem „nobs“ Ergebnis für eine einzelne Datei nicht alle der bis zu diesem Punkt kombiniert Dateien?

+0

@ 李哲源 ZheyuanLi -, die das Problem der kumulativen Ergebnisse löst, danke. Ich habe immer noch Probleme mit dem ID-Feld, das 40-45 zurückgeben sollte, aber 1-6 zurückgibt. – bdure

Antwort

2

Dies tut es:

for (i in seq(files_senscomp)) { 
    pre_dat <- read.csv(files_senscomp[i]) ## no `rbind` 
    nobs <- sum(complete.cases(pre_dat)) 
    ID <- id[i] ## `id` is your function argument, taking `40:45` 
    full_dat <- rbind(full_dat,data.frame(id = ID, nobs = nobs)) 
    } 
+0

Tatsächlich tut es - danke. – bdure

Verwandte Themen