wake-up-neo.net

Wie liest man Zahlen mit Komma als Dezimaltrennzeichen ein?

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.

25
klonq

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:

  1. Wofür steht die 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
  2. Was ist das Zeichen für den Dezimalpunkt? Für Standard-CSV ist dies ein ., 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.

38
Henrik

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. 

12
aL3xa
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. 

3

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
2
verena

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

1
Lowreno

könnte sein

as.is=T

dies verhindert auch, dass die Zeichenspalten in Faktoren umgewandelt werden

1
dmeu

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. 

0
RobertMyles