2015-09-28 26 views
1

我想讀取一個大的csv文件。的確,我想用一個名爲Race Color的專欄來選擇一個子集。讀通過read.csv文件,我有頭,使用read.csv.sql讀取特殊列

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文件。例如,我想所有種族色彩等於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。

任何解決方案?

回答

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")