sqldf に問題のある列を含む CSV ファイルがいくつかあり、一部の数値列が文字として分類されます。すべての列ではなく、それらの列のクラスを指定するにはどうすればよいですか? 多くの列があり、必ずしもすべてのクラスを指定する必要はありません。
これらの問題のある列のデータの多くはゼロであるため、数値 (または実数) データ型の場合、sqldf はそれらを整数として読み取ります。read.csv がクラスを正しく割り当てることに注意してください。私は適切なプロパティ (最初の 50 の値が 0、次に 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))