我经常使用read.csv函数读取大型CSV文件。这些文件没有标题,因此通过使用col.names参数,我可以正确定义导入后创建的 Dataframe 中的变量名称。
今天,我第一次不得不使用sqlf包中的read.csv.sql。要导入的文件非常大,我只需要根据该文件中的一个条件确定某些行。根据online documentation,过滤器必须在SELECT
语句的WHERE
子句中定义。(在其他列中),它是user_account
,我只想导入满足条件user_account = 'Foo'
的行。
df <- read.csv.sql(
"my_big_data_file.csv",
sql = "select * from file where user_account = 'Foo'",
header = FALSE,
colClasses = c(... Here I define column types ...),
sep = "|",
eol = "\n"
)
现在的问题是,与read.csv
不同,read.csv.sql
中显然没有col.names
参数。由于我的文件没有头,我不知道如何引用列名。我收到一个错误消息,因为我在上面代码中sql参数的WHERE
子句中写入了user_account
。R抱怨没有这样的变量。
那么,我如何在没有标题的CSV文件中使用read.csv.sql
引用列名,同时在过滤器中引用这些列名呢?这可能吗?
先谢了
1条答案
按热度按时间luaexgnf1#
最后,我在
read.csv.sql
的文档中找到了答案。我们必须使用fields.types
来代替colClasses
,方法是直接指定数据类型,因为它们是在SQLite中定义的,而不是在R中定义的。字段.类型:一个列表,其名称是列名称,其内容是列的SQLite类型(而不是R类名)。指定这些类型可以提高速度。除非速度非常重要,否则通常不使用此参数。
SQLite数据类型可用here
因此,我相应地修改了我的程序:
然而,最后我不得不通过
as.numeric
显式地转换一个已经转换为字符的变量。但是程序通过一个明确的警告消息指出了这一点。所以最后,这个解决方案为我完成了这项工作。我希望这可能会帮助那些遇到同样问题的人。