Самый элегантный способ загрузить csv с точкой как разделителем тысяч в R

Примечание: Насколько мне известно, этот вопрос не повторяется! Все вопросы/ответы, которые я нашел, касаются либо того, как исключить точки из данных, которые уже находятся в R, либо как изменить десятичную точку на запятую при ее загрузке.

У меня есть csv с такими числами, как: 4.123,98. Проблема в том, что из-за . вывод становится матрицей строк символов при загрузке с read.table, read.csv или read.csv2. Замена dec на , не помогает.

Мой вопрос
Каков самый элегантный способ загрузить этот csv, чтобы числа стали, например, 4123.98 как числовое?


person vonjd    schedule 13.05.2015    source источник


Ответы (2)


Адаптировано из этого сообщения: Укажите пользовательскую дату формат аргумента colClasses в read.table/read.csv

#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
person cryo111    schedule 13.05.2015

Вместо того, чтобы пытаться исправить все это во время загрузки, я загружал данные в R в виде строки, а затем обрабатывал их в числовом виде.

Итак, после загрузки это столбец строк типа «4.123,98».

Затем сделайте что-то вроде:

 number.string <- gsub("\\.", "", number.string)
 number.string <- gsub(",", "\\.", number.string)
 number <- as.numeric(number.string)
person Transcriptase    schedule 13.05.2015