![](/img/trans.png)
[英]How to write binary data into SQLite with R DBI's dbWriteTable()?
[英]CSV to SQLite in R (dbWriteTable): passing factors
我正在使用此工作流程来处理 R 中的大型 csv 文件:
library(sqldf)
csv <- "db.csv"
sqlite_file <- "db.sqlite"
table_name <- "table"
db <- src_sqlite(sqlite_file, create = TRUE)
con <- dbConnect(SQLite(), dbname = sqlite_file)
dbWriteTable(con, name=table_name, value=csv,
row.names=FALSE, header=TRUE, sep = ",", overwrite = TRUE)
然后我创建我的查询,获取数据等等。 数据将如下所示:
ID Class V1 V2 V3 ...
1 1.1 100 234 423
2 5 221 345 563
3 2.2.2 240 356 250
4 3.1 267 569 867
5 6 125 469 596
在 original.csv 文件中,列Class
是具有以下 10 个级别的因子:
"1.1" "1.2" "2.1" "2.2.1" "2.2.2" "3.1" "3.2" "4" "5" "6"
但是,一旦我将 csv 文件传递给 sqlite 并将其取回 R,该因子就会失去两个级别:
"1.1" "1.2" "2.1" "2.2" "3.1" "3.2" "4" "5" "6"
我认为,在将 csv 传递给 sqlite 时,该因子被读取为一个数字,我是对的。 既然这样我错误地分类了一些数据,你知道我怎样才能避免这个问题吗?
提前致谢。
由于大型 csv 只是先前处理的产物,我通过简单地导入另一个仅包含 ID 和类的 csv 来解决。
通过 SQL 语句获取数据后,我将 dataframe 转换为 data.table 并通过以下方式通过更新连接解决:
tags <- fread("ID_class.csv")
df <- dbFetch(query)
df <- data.table(df)
df$Class <- as.character(df$Class)
df <- df[tags, on=.(ID), Class := i.Class]
df$Class <- factor(df$Class)
这不是最优雅的方式,也不是最有效的方式(您需要以前的 csv 和正确的类),但它对我来说适用于这个问题。 任何其他建议或建议将不胜感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.