ファイルの行ごとにクリーニングする必要があるデータがあり、クリーニングしたデータを SQLite3 データベースに挿入したいと考えています。dataframeを必要とするRSQLiteライブラリを使用しています。動作させようとしているコードは次のとおりです。
# Select feature names for use as column names in X train/test loading
feature_names <- unlist(dbGetQuery(con, "select feature_name from features order by feature_id"), use.names = FALSE);
# Load X training data
X_train_lines <- readLines("data/train/X_train.txt"); # Space delimited with leading and trailing spaces
X_train_values <- vector("list", length(X_train_lines));
names(X_train_values) <- feature_names; # colnames or names?
for (index in 1:length(X_train_lines)) {
cleaned_line <- gsub("^ *|(?<= ) | *$", "", X_train_lines[index], perl=TRUE); # remove extraneous whitespaces
X_train_values[index] <- strsplit(cleaned_line, " "); # Wondering if X_train_values[index] is correct?
}
# Write features data to features table
dbWriteTable(con, "X_train", as.data.frame(X_train_values), row.names = FALSE);
コードは問題なく実行されますが、DbVisualizer を使用してデータベースを見ようとすると、エラーが発生します。
操作の実行中にエラーが発生しました: 不正なデータベース スキーマ (X_train) - X_train の列が多すぎます
私の唯一の推測は、行と列が何らかの形で転置されているということです。私の列名はfeature_names
ベクトルの値でなければなりません。
また、誰かがより良いアプローチのための提案があれば...
アップデート
何を見ているのかわかりませんでしたが、dput を実行してみました。まとめのトップはこうです。
head(summary(X_train_values))
Length Class Mode
tBodyAcc-mean()-X "561" "-none-" "character"
tBodyAcc-mean()-Y "561" "-none-" "character"
tBodyAcc-mean()-Z "561" "-none-" "character"
tBodyAcc-std()-X "561" "-none-" "character"
tBodyAcc-std()-Y "561" "-none-" "character"
tBodyAcc-std()-Z "561" "-none-" "character"
繰り返しますが、これはデータがすべて混同されていると私に信じさせます。561 列が必要であり、その一部は上で tBodyAcc-mean()-X などとして表されています。列の値は、上に表示されていない浮動小数点数である必要があります。
table コマンドが機能しませんでした:
table(X_train_values)
Error in table(X_train_values) :
attempt to make a table with >= 2^31 elements
561 列の 7,352 行が必要です。
更新 2
私の問題は、配列や配列のようなリストを使用しようとしていることだと思います。たとえば、Ruby では、次のようなことができます。
x_train_values = []
x_train_lines.each { |line| x_train_values << line.split(' ') }