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)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diesem problem wäre es wahrscheinlich am besten aufgeteilt werden in zwei Schritten -- computing den Wert für jede Datei und für die Erhebung der Ergebnisse für alle Ihre Dateien.