我有一些 CSV 文件的 sqldf 列有问题,导致一些数字列被归类为字符。我怎样才能只为这些列指定类,而不是每一列?有很多列,我不一定要为所有列指定类。
这些问题列中的大部分数据都是零,因此当它们是数字(或实数)数据类型时,sqldf 将它们读取为整数。请注意, read.csv 正确分配了类。我不够聪明,无法生成具有正确属性的合适数据集(前 50 个值为零,然后在第 51 行中的值为 1.45),但这是一个加载数据的示例调用:
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))