【问题标题】:sqldf returns zero observationssqldf 返回零观察值
【发布时间】:2018-11-26 05:31:07
【问题描述】:

我的本​​地驱动器上有许多大型数据文件 (.csv),需要在 R 中读取、过滤行/列,然后合并。每个文件大约有 33,000 行和 575 列。

我读了这篇文章:Quickly reading very large tables as dataframes 并决定使用“sqldf”。

这是我的代码的简短版本:

Housing <- file("file location on my disk")
Housing_filtered <- sqldf('SELECT Var1 FROM Housing', file.format = list(eol="/n")) *I am using Windows

我看到“Housing_filtered”数据框是用 Var1 创建的,但观察值为零。这是我第一次使用 sqldf。我不确定为什么会返回零观测值。

我还使用了“read.csv.sql”,但我仍然看到零观察结果。

Housing_filtered <- read.csv.sql(file = "file location on my disk",
                    sql = "select Var01 from file", 
                    eol = "/n",
                    header = TRUE, sep = ",")

【问题讨论】:

  • 欢迎来到 StackOverflow!我们实际上要求调试问题以获得可重现示例。没有您的数据,我们无法知道问题所在。但是,我敢打赌,您的文件所期望的格式存在问题。 class(Housing) 是数据帧吗?如果是这样,dim(Housing) 是什么?你能用read.csv() 导入你的文件,以便我们知道我们得到了什么吗?
  • 请注意,换行符是\n 而不是/n
  • @ G. Grothendieck:当我将 \n 更改为 /n 时,出现以下错误:Error in connection_import_file(conn@ptr, name, value, sep, eol, skip) : RS_sqlite_import: file_location_and_name.csv line 2 expected 575 columns of data but found 747
  • @Hack-R:谢谢。由于我使用的是大型本地文件,因此我不确定如何使我的问题可重现。针对您的问题,dim(Housing) 在我运行第一个示例代码后返回NULLclass(Housing) 返回[1] "file" "connection"。我可以用 read.csv() 打开我的文件,给我一个暗 33121 x 575 的 data.frame。
  • @Hessam 好的,所以文件从未导入

标签: r sqldf


【解决方案1】:

您从未像您想的那样真正将文件作为data.frame 导入。

您已经打开了一个到文件的连接。您提到它是 CSV。您的代码应该如下所示如果它是一个普通的 CSV 文件:

Housing          <- read.csv("my_file.csv")
Housing_filtered <- sqldf('SELECT Var1 FROM Housing')

如果此 CSV 文件有非标准内容,请说明它是什么以及它是如何创建的。

此外,在 cmets 中提出的另一点是,如果您出于某种原因需要手动输入换行符,请使用 \n,而您使用的是 /n。任何错误都不是由该更改引起的,而是您将一个问题传递给另一个问题,这可能是由于未正确处理丢失的数据、空格、未处理的文本字段中的逗号等。

如果仍然存在数据错误,您能否使用 R 代码创建一个小文件,以反映您的数据的相关特征,并且在导入时会产生相同的错误? This 可能会有所帮助。

【讨论】:

  • 这是一个普通的 CSV,您的代码有效。 "\n" 也可以正常工作。谢谢!我试图避免使用read.csv,因为加载我的 CSV 文件需要很长时间(我必须阅读大约 10 个昏暗 33121 到 575 的 CVS 文件)。这就是为什么我还尝试read.csv.sql 将每个文件加载到临时 SQLite 数据库中,然后将它们读入 R。但收到此错误消息 Error in connection_import_file(conn@ptr, name, value, sep, eol, skip) : RS_sqlite_import: file_location_and_name.csv line 2 expected 575 columns of data but found 747。让我创建一个可重现的示例并再次发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2021-04-06
  • 2019-11-12
  • 1970-01-01
相关资源
最近更新 更多