У меня есть несколько файлов CSV с проблемными столбцами для sqldf, из-за чего некоторые числовые столбцы классифицируются как символьные. Как я могу просто указать классы для этих столбцов, а не для каждого столбца? Есть много столбцов, и мне не обязательно указывать класс для всех из них.
Большая часть данных в этих проблемных столбцах — нули, поэтому sqldf считывает их как целые числа, когда они имеют числовой (или реальный) тип данных. Обратите внимание, что read.csv правильно назначает классы. Я недостаточно умен, чтобы сгенерировать подходящий набор данных с правильными свойствами (сначала 50 нулевых значений, затем значение, скажем, 1,45 в 51-й строке), но вот пример вызова для загрузки данных:
df <- read.csv.sql("data.dat", sql="select * from file",
file.format=list(colClasses=c("attr4"="numeric")))
который возвращает эту ошибку:
Error in sqldf(sql, envir = p, file.format = file.format, dbname = dbname, :
formal argument "file.format" matched by multiple actual arguments
Могу ли я как-то использовать другой вызов read.table для определения типов данных? Могу ли я прочитать все столбцы как символы, а затем преобразовать некоторые в числовые? Есть небольшое число, которое является символьным, и было бы проще указать их, чем все числовые столбцы. Я придумал это уродливое частичное решение, но оно все еще не работает в последней строке с тем же сообщением об ошибке:
df.head <- read.csv("data.dat", nrows=10)
classes <- lapply(df.head, class) # also fails to get classes correct
classes <- replace(classes, classes=="integer", "numeric")
df <- read.csv.sql("data.dat", sql="select * from file",
file.format=list(colClasses=classes))