【发布时间】:2019-09-11 11:05:15
【问题描述】:
我正在尝试将 sqldf 用于我的大型数据集。 (原始数据文件分散在 1000~ 个单独的 csv 文件中,因此我创建了一个包含所有这些信息的主 csv 文件,并计划根据需要使用 sqldf 来获取数据)
尝试一些简单的代码后,我的 sql 查询都没有返回有效结果——所有查询都将返回 0 个观察值!
我尝试运行“read.csv.sql”文档中提供的示例代码,该代码使用 iris 数据集创建一个 csv 文件,并运行一个简单的 sql 查询以从创建的 csv 文件中获取数据。我做了两个不同的版本:
write.csv(iris, "iris1.csv", quote = FALSE, row.names = FALSE)
iris1 <- read.csv.sql("iris1.csv",
sql = "select * from file where Species = 'setosa' ")
dim(iris1)
write_csv(iris, "iris2.csv")
iris2 <- read.csv.sql("iris2.csv",
sql = "select * from file where Species = 'setosa' ")
dim(iris2)
我得到以下信息:
> dim(iris1)
[1] 50 5
> dim(iris2)
[1] 0 5
我发现的唯一区别是“iris1.csv”是用 write.csv 制作的,而“iris2.csv”是用 write_csv 制作的。对我来说,它们似乎是完全相同的 csv 文件。造成这种意外结果的根本原因是什么?我只会使用 write.csv,但我的数据集太大了,我肯定需要使用 write_csv 来创建主数据库。
【问题讨论】:
-
我认为问题在于 CSV 编码格式。根据
write_csv手册,输出(iris2)应编码为UTF-8(如write.csvfor iris1),但我怀疑它是CSV-Macintosh,这不是read.csv.sql的最佳选择。