Как указать colClasses при чтении очень большого файла CSV в R с использованием read.table.ffdf?
Я пытаюсь прочитать очень большой файл.csv, размером около 20 ГБ, используя функцию read.table.ffdf() в пакете "ff", но у меня возникли проблемы при указании параметра colClasses в read.csv().
Я должен указать опцию colClasses, потому что некоторые столбцы в файле помечены как очень длинные целые числа, например, с 11 цифрами. Например, две строки в файле
86246,205,17,1719,104116343,8435,2013-03-13,12,OZ,1,2.59
86246,205,17,1719,10800749282,8435,2013-03-13,12,OZ,1,2.59
Целое число 10800749282 слишком велико для типа "целое" и может обрабатываться только как "числовой" или "символьный". Но значение 104116343 в приведенной выше строке недостаточно велико, поэтому R по умолчанию будет рассматривать этот столбец как "целое число".
Я попробовал следующее, но получил ошибку. кто-нибудь знает, как решить эту проблему? Высоко ценится!
dat <- read.table.ffdf(file="file.csv", FUN = "read.csv", na.strings = "", colClasses="character")
Ошибка в ff(initdata = initdata, длина = длина, уровни = уровни, упорядоченный = упорядоченный,: vmode 'символ' не реализован
1 ответ
Как показывает ваша ошибка, в среде ff не реализован тип данных "символ". Все персонажи должны рассматриваться как факторы. Предполагая, что ваш файл содержит х количество столбцов, работает ниже:
dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=rep("factor", x))
Однако, вероятно, вам не нужно импортировать все данные как факторы, так как это крайне неэффективно. Просто импортируйте все ваши числовые данные как "числовые". Предполагая, что ваши первые 5 столбцов являются числовыми, а остальные 3 являются символами:
dat <- read.csv.ffdf(NULL, file="file.csv", na.strings = "", colClasses=c(rep("numeric", 5), rep("factor", 3)))