Vielleicht kennt Ihr mein Problem von gestern abend: Ich lese ein csv in R ein und eine Spalte, die ganz klar numeric sein müsste wird als factor eingelesen. Sowas haben wir im Forum ja immer mal wieder und deshalb ist sofort klar, dass irgendwo in dieser Spalte möglicherweise ein einziger Eintrag ist, der nicht als Zahl gelesen wird. Ich habe also gemacht, was ich im Forum auch machen würde: names(spalte) aufgerufen und mit meinen Augen gesucht, welches nicht passt. Dummerweise war es visuell nicht so leicht zu erkennen und was hätte ich gemacht, wenn es nicht 208 sondern zwanzigtausend Zeilen gewesen wären?
Da wurde mir klar, es müsste eine function spot.factor.issue() geben. Diese Funktion ruft man mit einem Factor-Vector als Argument auf und sie weist einen auf die Elemente des Vektors hin, die einer Konversion in Zahlen entgegen stehen. Eine naive Implementation könnte vielleicht so aussehen:
Code: Alles auswählen
spot.factor.issue <- function(column)
which(is.na(as.numeric(as.character(column))))
Code: Alles auswählen
expl.1 <- factor(c("-6.32", "-5.66", "-5.64","-5.58", "-4.7", "-4.69",
"-3.75", "-2.92", "-2.89", "-2.56", "-2.51", "-1.75",
"-1.1", "-0.37", "0.05", "0.6", "0,67", "1.64", "1.89",
"2.36", "2.6", "3", "3.37", "4.17", "4.81", "O.93"))
spot.factor.issue(expl.1)
Code: Alles auswählen
expl.2 <- read.table(text = "1.5 1.6 1.7 1,8
NA NA 1.7 1.8
NA NA 1.7 NA")
spot.factor.issue(expl.2[[4]])
In meiner Vision würden wir gemeinsam eine möglichst fähige Funktion erstellen und Student würde sie irgendwo auf dem Server hinterlegen, sodass man bei der nächsten Anfrage "Warum erkennt R meine Zahlen nicht?" einfach schreiben könnte:
Na gut, wenn man das mit dem source nicht gut findet, könnte man ja einen FAQ-Post erstellen.Lass mal folgendes Laufen und poste das Ergebnis:Code: Alles auswählen
source("http://forum.r-statistik.de/faktorproblem.R") spot.factor.issue(spaltenname)
Bin ich der einzige, der das gut fände? Oder gib es das schon und ich versuche, das Rad neu zu erfinden?
Viele Grüße,
Bernhard