gpt4 book ai didi

r - 如何将CSV导入R的Sqlite中,其中变量之一的引号内带有逗号(,)?

转载 作者:行者123 更新时间:2023-12-03 19:50:28 25 4
gpt4 key购买 nike

这让我发疯。

我有一个csv文件“ hello.csv”

a,b
"drivingme,mad",1


我只想将其从R中转换为sqlite数据库(我需要这样做,因为实际文件实际上是10G,它不适合data.frame,因此我将使用Sqlite作为中间数据存储区)

dbWriteTable(conn= dbConnect(SQLite(), 
dbname="c:/temp/data.sqlite3",
name="data",
value="c:/temp/hello.csv",row.names=FALSE, header=TRUE)


上面的代码因错误而失败

Error in try({ : 
RS-DBI driver: (RS_sqlite_import: c:/temp/hello.csv line 2 expected 2 columns of data but found 3)
In addition: Warning message:
In read.table(fn, sep = sep, header = header, skip = skip, nrows = nrows, :
incomplete final line found by readTableHeader on 'c:/temp/hello.csv'


我如何告诉它将引号“”内的逗号(,)视为字符串而不是分隔符!

我尝试添加参数

quote="\""


但这没有用。救命!! read.csv只工作文件,读取大文件时将失败。

最佳答案

更新资料
现在更好的方法是使用readr的分块函数,例如

#setting up sqlite
con_data = dbConnect(SQLite(), dbname="yoursqlitefile")

readr::read_delim_chunked(file, function(chunk) {
dbWriteTable(con_data, chunk, name="data", append=TRUE )) #write to sqlite
})

原本比较笨拙的方式
一种方法是从文件读取,因为read.csv可以工作,但是它无法将整个数据加载到内存中。
    n = 100000 # experiment with this number
f = file(csv)
con = open(f) # open a connection to the file
data <-read.csv(f,nrows=n,header=TRUE)
var.names = names(data)

#setting up sqlite
con_data = dbConnect(SQLite(), dbname="yoursqlitefile")

while(nrow(data) == n) { # if not reached the end of line
dbWriteTable(con_data, data, name="data",append=TRUE )) #write to sqlite
data <-read.csv(f,nrows=n,header=FALSE))
names(data) <- var.names
}
close(f)
if (nrow(data) != 0 ) {
dbWriteTable(con_data, data, name="data",append=TRUE ))

关于r - 如何将CSV导入R的Sqlite中,其中变量之一的引号内带有逗号(,)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com