У меня есть CSV-файлы с проблемными столбцами для sqldf, в результате чего некоторые числовые столбцы классифицируются как символы. Как я могу просто указать классы для этих столбцов, а не для каждого столбца? Есть много столбцов, и я не обязательно хочу указать класс для всех из них.Как я могу указать только некоторые colClasses в sqldf file.format?
Значительная часть данных в этих столбцах проблем - это нули, поэтому 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))
Спасибо, я глупо предположил, что аргумент был каким-то образом похож на nrows read.csv и прошел мимо него. Тем не менее, с большим файлом, использование -1 добавляет некоторое время на вызов. Жаль, что я не смог ее решить, используя colClasses. –