繁体   English   中英

CSV 到 SQLite 在 R (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM