webentwicklung-frage-antwort-db.com.de

Numerische Variablen, die beim Lesen einer CSV-Datei in Faktoren konvertiert werden

Ich versuche, eine in Excel erstellte CSV-Datei in R zu lesen, in der alle Vektoren (Spalten in der CSV-Datei) numerisch sind. Sie werden jedoch bei jedem Import in Faktor konvertiert.

Hier ist ein Beispiel, wie mein CSV aussieht:

enter image description here

Das ist mein Code:

options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")

Wie Sie sehen, kümmere ich mich um die Einstellung von de dec auf "," und den Separator auf ";". Alle Vektoren, die numerisch sein sollen, sind jedoch Faktoren!

Kann mir jemand einen Rat geben? Vielen Dank!

16
intael

Ihre NA-Zeichenfolgen in der csv-Datei N/A werden als character interpretiert, und die gesamte Spalte wird in character konvertiert. Wenn Sie stringsAsFactors = TRUE in options oder in read.csv (Standardeinstellung) haben, wird die Spalte weiter in factor konvertiert. Mit dem Argument na.strings können Sie read.csv mitteilen, welche Zeichenfolgen als NA interpretiert werden sollen.

Ein kleines Beispiel:

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";")
str(df)

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)

Update folgenden Kommentar

Obwohl dies aus den bereitgestellten Beispieldaten nicht ersichtlich ist, gibt es auch ein Problem, wenn '$' mit den Zahlen verkettet ist, z. '3,3 $'. Solche Werte werden als character interpretiert, und der dec = "," hilft uns nicht. Wir müssen sowohl das '$' als auch das ',' ersetzen, bevor die Variable in eine Zahl konvertiert wird.

df <- read.csv(text = "x;y;z
               N/A;1,1;2,2$
               $3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)

df[] <- lapply(df, function(x){
  x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
  x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
  as.numeric(x3)
  }
                         )
df
str(df)
12
Henrik

Sie hätten Ihren Originalcode tatsächlich zum Laufen bringen können - es gibt einen winzigen Tippfehler ('stringsAsFactors', nicht 'StringsAsFactors'). Der Befehl options beschwert sich nicht mit dem falschen Text, aber er funktioniert einfach nicht. Wenn es richtig gemacht wird, liest es es als Zeichen statt Faktoren. Sie können dann Spalten in das gewünschte Format konvertieren.

3
aifille

Ich hatte gerade das gleiche Problem und habe alle Fixes für diese und andere doppelte Beiträge ausprobiert. Keiner hat wirklich so gut funktioniert. Die Art, wie ich das Problem gelöst habe, war eigentlich auf der Excel-Seite. Wenn Sie alle Spalten in Ihrer Quelldatei hervorheben (in Excel), klicken Sie mit der rechten Maustaste = => Zellen formatieren und wählen Sie "Nummer" aus. Der Import wird einwandfrei ausgeführt (solange Sie keine nicht numerischen Zeichen unterhalb der Kopfzeile haben).

0
Jesse001