在R中,使用read.csv.sql读取特殊列

时间:2015-09-28 18:36:41

标签: sql r sqldf

我正在尝试阅读一个大的csv文件。实际上,我想使用名为Race Color的特殊列选择子集。通过read.csv读取文件,我有头

library(sqldf)
df <-  read.csv(file = 'df.txt', header = T, sep = ";")
head(df)

id  Region  Race Color  .... 
 1       1          1
 2       1          1
 3       2          1
 4       3          2
 5       4          1
 6       4          1

我想使用read.csv.sql来选择df的子集而不使用read.csv文件。例如,我希望Race Color的所有人都等于1。 使用read.csv.sql,我有类似

的东西
>df <- read.csv.sql("df.txt", sql = "select * from file where Race Color = 1", sep=";", header=T, eol="\n")

但我有以下错误

Error in sqliteSendQuery(con, statement, bind.data) : 
error in statement: near "Color": syntax error

尝试

>df <- read.csv.sql("df.txt", sql = "select * from file where 'Race Color' = 1", sep=";", header=T, eol="\n")

我的df为零行。

任何解决方案?

1 个答案:

答案 0 :(得分:3)

R会自动将.添加到列名称中,并在数据中读取空格以生成Race.Color,但.在sql中具有特殊含义,因此这会使事情变得棘手起来。

sqldf中有一个内置方法,使用方括号([Race.Color])来明确命名我们可以使用的列,这样我们就不会遇到这个问题。您还可以使用转义引号:\"Race.Color\"

这应该有效:

library(sqldf)

read.csv.sql("test.csv", sql = "select * from file where [Race.Color] = 1", sep=";", header=T, eol="\n")