R sqldf无法识别使用“write_csv”创建的源csv文件

问题描述 投票:0回答:1

我正在尝试将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来创建一个主数据库。

r sqldf
1个回答
3
投票

问题没有提到平台。我无法在Linux上重现这一点,但可以在Windows上重现该问题。 Windows上的问题是行结尾。 write_csv\n写为行结尾,但read.csv.sql默认为运行平台上的常用行结尾 - 在Windows上,通常的行结尾是\r\nwrite.csvread.csv.sql都有一个eol参数,允许一个人指定行尾字符,但write_csv没有(参见readr issue #857)所以尝试在eol = "\n"中指定read.csv.sql,如下所示:

write_csv(iris, "iris2.csv")

iris2a <- read.csv.sql("iris2.csv", 
  sql = "select * from file where Species = 'setosa' ", eol = "\n")

dim(iris2a)
## [1] 50  5
© www.soinside.com 2019 - 2024. All rights reserved.