我有需要为文件中的每一行清理的数据,并且我想将清理后的数据插入 SQLite3 数据库中。我正在使用需要数据框的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(X_train_values)
Error in table(X_train_values) :
attempt to make a table with >= 2^31 elements
我应该有 7,352 行和 561 列。
更新 2
我相信我的问题是我正在尝试使用一个或多个数组之类的列表。例如,在 Ruby 中,我可以这样做:
x_train_values = []
x_train_lines.each { |line| x_train_values << line.split(' ') }