2015-09-28 2 views
1

Я пытаюсь прочитать большой файл csv. В самом деле, я хочу выбрать подмножество, используя специальный столбец, имя которого - Race Color. Чтение файла с помощью read.csv, у меня есть главав R, читать специальные столбцы с 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 для выбора подмножества ФР без использования файла 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") 
Смежные вопросы