2015-05-13 19 views
9

NB: Per quanto ne so, questa domanda non è un duplicato! Tutti i presenti/risposte che ho trovato sono o come eliminare punti dai dati che sono già in R o come cambiare il punto decimale in virgola quando lo si carica.Il modo più elegante per caricare csv con punto come separatore di migliaia in R

Ho un csv con numeri come: 4.123,98. Il problema è che a causa dello . l'output diventa una matrice di stringhe di caratteri durante il caricamento con read.table, read.csv o read.csv2. La modifica di dec a , non aiuta.

La mia domanda
Qual è il modo più elegante per caricare questo csv in modo che i numeri diventano esempio 4123.98 come numerico?

risposta

9
#some sample data 
write.csv(data.frame(a=c("1.234,56","1.234,56"), 
        b=c("1.234,56","1.234,56")), 
      "test.csv",row.names=FALSE,quote=TRUE) 

#define your own numeric class 
setClass('myNum') 
#define conversion 
setAs("character","myNum", function(from) as.numeric(gsub(",","\\.",gsub("\\.","",from)))) 

#read data with custom colClasses 
read_data=read.csv("test.csv",stringsAsFactors=FALSE,colClasses=c("myNum","myNum")) 
#let's try whether this is really a numeric 
read_data[1,1]*2 

#[1] 2469.12 
+0

BTW: Adattato da qui http://stackoverflow.com/ domande/13022299/specificare-date-format-per-colclasses-argomento-in-read-table-read-csv – cryo111

2

Anziché provare a risolvere tutto al momento del caricamento, caricarei i dati in R come stringa, quindi li elabero in numerico.

Così dopo il caricamento, è una colonna di stringhe come "4.123,98"

poi fare qualcosa di simile:

number.string <- gsub("\\.", "", number.string) 
number.string <- gsub(",", "\\.", number.string) 
number <- as.numeric(number.string) 
Problemi correlati