¿Cómo leer datos cuando algunos números contienen comas como separador de miles?

Resuelto Rob Hyndman asked hace 54 años • 11 respuestas

Tengo un archivo csv donde algunos de los valores numéricos se expresan como cadenas con comas como separador de miles, por ejemplo, "1,513"en lugar de 1513. ¿Cuál es la forma más sencilla de leer los datos en R?

Puedo usar read.csv(..., colClasses="character"), pero luego tengo que eliminar las comas de los elementos relevantes antes de convertir esas columnas a numéricas, y no puedo encontrar una manera clara de hacerlo.

Rob Hyndman avatar Jan 01 '70 08:01 Rob Hyndman
Aceptado

No estoy seguro de cómo interpretarlo read.csvcorrectamente, pero puede usarlo gsubpara reemplazar ","con ""y luego convertir la cadena para numericusar as.numeric:

y <- c("1,200","20,000","100","12,111")
as.numeric(gsub(",", "", y))
# [1]  1200 20000 100 12111

Esto también se respondió anteriormente en R-Help (y en el segundo trimestre aquí ).

Alternativamente, puede preprocesar el archivo, por ejemplo en sedUnix.

Shane avatar Oct 06 '2009 01:10 Shane

Puede hacer que read.table o read.csv realicen esta conversión de forma semiautomática. Primero cree una nueva definición de clase, luego cree una función de conversión y configúrela como un método "as" usando la función setAs de esta manera:

setClass("num.with.commas")
setAs("character", "num.with.commas", 
        function(from) as.numeric(gsub(",", "", from) ) )

Luego ejecute read.csv como:

DF <- read.csv('your.file.here', 
   colClasses=c('num.with.commas','factor','character','numeric','num.with.commas'))
Greg Snow avatar Aug 31 '2010 17:08 Greg Snow