Korrelation zwischen NA-Spalten

Muss ich eine Funktion schreiben, die nimmt ein Verzeichnis der Dateien und eine Schwelle für die vollständige Fällen und berechnet die Korrelation zwischen Sulfat und Nitrat (zwei Spalten) aus jeder Datei wo die Anzahl der vollständig beobachteten Fälle (über alle Variablen) größer als der Schwellenwert ist. Die Funktion zurückgeben soll ein Vektor der Korrelationen für die Monitore, die den Schwellenwert Anforderung. Wenn keine Dateien, die den Schwellenwert Anforderung, dann die Funktion zurückgeben soll ein numerischer Vektor der Länge 0. Ein Prototyp dieser Funktion folgt

Mein code sieht wie folgt aus

corr <- function(directory,threshold=0){
    a<-list.files("specdata")
    for (i in a) {
        data <- read.csv(paste(directory, "/", i, sep =""))
        x<-complete.cases(data)
        j<-sum(as.numeric(x))
        sulfate<-data[,2]
        nitrate<-data[,3]
        b<-cor(sulfate,nitrate)
    }  
    if (j>threshold) 
        return(b) 
    else
        numeric()
}

gibt es keine error messege

Wenn ich Typ

z<-corr("specdata")

Kopf(z)
[1] NA

Ich weiß nicht, was das problem ist. Ich weiß nicht, ob NA-Werte in den Spalten zu tun haben mit ihm. Ich denke, etwas fehlt in meinem code. Ich denke, das zu Lesen.csv-erstellt eine einzigartige Daten-frame, wenn ich eine Daten-Bild-pro-Datei, aber ich sehe nicht ein, warum die Rückkehr ist NA in diesem Fall (wenn es keine Schwelle).

Jedoch, wenn ich Ihnen eine größere Schwelle (1000):

z<-corr("specdata",1000)
head(z)
numeric(0)

Den erwarteten Ausgang ich brauche, ist

cr <- corr("specdata", 150) 
head(cr) 
[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956 -0.12350667 -0.07588814
  • sulfate<-data[x,2]; nitrate<-data[x,3]
  • Ok, jetzt scheint es zu funktionieren, aber nicht als die erwartete Ausgabe. Könnte es sein, dass die Dateien nicht geladen werden, richtig? meine csv-Dateien sind im Format wie 001, 002, 003, ... aber ich glaubte nicht, verwenden Sie sprintf(%03d), denn ich verwendete Liste.Dateien und das schien zu funktionieren.
  • Überschreiben Sie b innerhalb der Schleife.
  • Ich verstehe, wie konnte ich ändern, meine if-Anweisung, um zu schreiben, b, nur, wenn (j>Schwelle)?
Schreibe einen Kommentar