Ich habe eine Reihe von CSV-Dateien, bei denen Zahlen im europäischen Stil mit Kommas anstelle von Dezimalzeichen formatiert werden, d. H. 0,5
anstelle von 0.5
.
Es gibt zu viele dieser Dateien, um sie vor dem Importieren in R zu bearbeiten. Ich hatte gehofft, es gibt einen einfachen Parameter für die Funktion read.csv()
oder eine Methode, die auf das extrahierte Dataset angewendet werden kann, damit R die Daten eher als Zahl behandelt ein Faden.
Wenn Sie ?read.table
überprüfen, werden Sie wahrscheinlich alle Antworten finden, die Sie benötigen.
Es gibt zwei Probleme mit (kontinentalen) europäischen CSV-Dateien:
c
in csv? Für Standard-CSV ist dies ein ,
, für europäische csv ist dies ein ;
sep
ist das entsprechende Argument in read.table
.
, für europäische csv ist dies ein ,
dec
ist das entsprechende Argument in read.table
Zum Lesen der Standard-CSV verwenden Sie read.csv
. Zum Lesen der europäischen CSV verwenden Sie read.csv2
. Diese beiden Funktionen sind nur Wrapper für read.table
, die die entsprechenden Argumente festlegen.
Wenn Ihre Datei nicht befolgt wird, legen Sie die Argumente manuell fest.
Von ?read.table
:
dec the character used in the file for decimal points.
Und ja, Sie können das auch für read.csv
verwenden. (zu mir: nein, du kannst nicht!)
Alternativ können Sie auch verwenden
read.csv2
die ein "," Dezimaltrennzeichen und ein ";" für Spaltentrenner.
read.csv(... , sep=";")
Angenommen, dieses importierte Feld wird als "Betrag" bezeichnet. Sie können den Typ auf diese Weise festlegen, wenn Ihre Zahlen als Zeichen eingelesen werden:
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
Ich habe dies häufig mit einer Reihe anderer Ärgernisse beim Importieren aus Excel oder Excel CSV. Da es scheinbar keine konsistente Möglichkeit gibt, das zu erreichen, was Sie beim Importieren in R erwarten, sind Post-hoc-Korrekturen die beste Methode. Damit meine ich, BLICK auf das, was Sie importiert haben - stellen Sie sicher, dass es das ist, was Sie erwartet haben, und korrigieren Sie es, wenn dies nicht der Fall ist.
Probleme können auch gelöst werden, wenn Sie angeben, wie Ihre fehlenden Werte dargestellt werden (na.strings = ...). Zum Beispiel haben V1 und V2 hier das gleiche Format (Dezimalstellen in der CSV-Datei durch "," getrennt), aber da NA in V1 vorhanden sind, wird dies als Faktor interpretiert:
dat <- read.csv2("...csv", header=TRUE)
head(dat)
> ID x time V1 V2
> 1 1 0:01:00 0,237 0.621
> 2 1 0:02:00 0,242 0.675
> 3 1 0:03:00 0,232 0.398
dat <- read.csv2("...csv", header=TRUE, na.strings="---")
head(dat)
> ID x time V1 V2
> 1 1 0:01:00 0.237 0.621
> 2 1 0:02:00 0.242 0.675
> 3 1 0:03:00 0.232 0.398
kann wie folgt verwendet werden:
mydata <- read.table (fileIn, dec = ",")
eingabedatei (fileIn):
D:\TEST> mehr input2.txt
06-05-2014 09:19:38 3,182534 0
06-05-2014 09:19:51 4,2311 0
könnte sein
as.is=T
dies verhindert auch, dass die Zeichenspalten in Faktoren umgewandelt werden
Um Brandon noch weiter oben zu beantworten, was für mich gut funktioniert hat (ich habe nicht genug Repräsentanten, um einen Kommentar abzugeben):
Wenn du verwendest
d$amount <- sub(",",".",d$amount)
d$amount <- as.numeric(d$amount)
vergessen Sie nicht, dass Sie möglicherweise sub("[.]", "", d$amount, Perl=T)
benötigen, um das .
-Zeichen zu umgehen.