我正在尝试阅读一个大的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为零行。
任何解决方案?
答案 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")