如何使用SQL从非常大的.csv中将单元格和行拉入R?

时间:2018-03-21 23:53:30

标签: r

有没有办法使用SQL查询从csv中读取一些数据并将其传递到数据帧?即将聚合函数SQL查询的结果放入新的数据框中?通常我会读入并修改/使用整个csv,但它的大小太大了。

1 个答案:

答案 0 :(得分:1)

如果你去阅读sqldf,你会发现具体的功能

read.csv.sql 读取由SQL过滤的文件

哪个

<强>描述 将文件读入R,用sql语句对其进行过滤。只有过滤的部分由R处理,以便可以容纳大于R的文件。

<强>用法

read.csv.sql(file, sql = "select * from file", header = TRUE, sep = ",",
row.names, eol, skip, filter, nrows, field.types,
colClasses, dbname = tempfile(), drv = "SQLite", ...)
read.csv2.sql(file, sql = "select * from file", header = TRUE, sep = ";",
row.names, eol, skip, filter, nrows, field.types,
colClasses, dbname = tempfile(), drv = "SQLite", ...)

<强>参数

  1. file文件路径或URL(以http://或ftp://开头)。如果使用过滤器参数并且没有文件要输入到过滤器,则可以省略文件,NULL,NA或“”。
  2. 持有SQL语句的sql字符串。表示文件的表应该称为文件。
  3. header与read.csv中一样。
  4. sep与read.csv中一样。
  5. row.names与read.csv中一样。
  6. eol字符结束。
  7. 跳过输入文件中指示的行数。 如果指定,则应该是输入文件通过管道传递的shell / batch命令。对于read.csv2.sql,在非Windows系统上默认为以下内容:tr,..这会将文件中的所有逗号转换为点。在Windows上提供了类似的功能,但是使用sqldf中包含的vbscript文件来模拟tr命令。
  8. nrows用于确定列类型的行数。它默认为50.使用-1会导致它使用所有行来确定列类型。很少需要这个论点。
  9. 字段类型列表,其名称是列名称,其内容是列的SQLite类型(不是R类名称)。指定这些类型可以提高速度。除非速度非常重要,否则通常不会使用此参数。
  10. colClasses与read.csv中一样。
  11. dbname与sqldf一样,但默认值为tempfile()。指定NULL会将数据库放入内存中,这可能会提高速度,但会限制可用内存的数据库大小。