2013-03-12 2 views
1

SQL 문을 처음 사용하는 데 익숙하지 않고 큰 표에서 원하는 열을 선택하여 R로 가져 오는 데 약간의 문제가 있습니다.SQLDF 또는 read.csv.sql을 사용하여 모든 N 번째 열을 선택하십시오.

저는 csv 파일을 가져 와서 선택한 열을 r, 특히 9 번째 및 10 번째 열마다 읽으려고합니다. R에서, 뭔가 같은 :

read.csv.sql("myfile.csv", sql(select * from file [EVERY 9th and 10th COLUMN]) 
인터넷의 내 트롤 매 n 번째 행을 선택하는 것은 (만약 내가 잘못 나 수정하시기 바랍니다)이 같은 MOD 뭔가를 사용하여 SQL 문을 수행 할 수 있음을 시사

:

"SELECT * 
     FROM file 
     WHERE (ROWID,0) IN (SELECT ROWID, MOD(ROWNUM,9) OR MOD(ROWNUM,10)" 

열에 대해이 방법을 사용할 수 있습니까? 미리 감사드립니다.

+0

RDBMS를 사용하고 계십니까? 귀하의 제목은 n 번째 열을 말하고 질문은 n 번째 행을 말합니다 - 어느 것이 맞습니까? –

+0

@PreetSangha ** sqldf **를 사용하면 SQLite를 백 엔드로 사용해야합니다. – joran

+0

감사합니다. 나는 그것을 몰랐습니다. –

답변

2

read.csvread.csv이 적합 할 것입니다 :

nms <- names(DF1) 
vars <- toString(nms[is.na(colClasses)]) 
DF <- fn$read.csv.sql(myfile, "select $vars from file") 

UPDATE :이와 마지막 줄을 교체 sqldf 사용하려면

# determine number of columns 
DF1 <- read.csv(myfile, nrows = 1) 
nc <- ncol(DF1) 

# create a list nc long where unwanted columns are NULL and wanted are NA 
colClasses <- rep(rep(list("NULL", NA), c(8, 2)), length = nc) 

# read in 
DF <- read.csv(myfile, colClasses = colClasses) 

sqldf read.csv로 전환 .sql

업데이트 2 : 수정.

+0

정말 고마워요! read.csv 메서드는 작은 테스트 파일에서 훌륭하게 작동하지만 251MB의 파일에서 사용하는 것을 주저하고 있습니다. read.csv는 가난한 32 비트 R에서 큰 파일을 사용하지 않으려 고합니다. colClasses 수정, 작업 수를 크게 줄일 수 있습니까? sqldf 함수의 경우 구문에 익숙하지 않습니다. fn $ sqldf에서 파일을 지정하는 방법은 무엇입니까? .csv 파일을 데이터베이스에 미리로드해야합니까? read.csv.sql을 사용하여 단계를 저장하려고한다면 동일한 SQL 구문을 유지할 수 있습니까? 즉, read.csv.sql (myfile, sql = "파일에서 $ vars 선택" –

+0

read.csv.sql로 전환했습니다. 정확한 형식에 따라 read.csv.sql에 다른 인수를 사용해야 할 수도 있습니다. ? read.csv.sql을 참조하십시오. 성능 측면에서 볼 때 실제로 데이터를 사용해보십시오. 행의 1MB 하위 집합으로 시도해보십시오 (예 : –

+0

). 읽음 .csv.sql 메서드를 사용하면 다음과 같은 오류가 발생합니다. "sqliteExecStatement (con, statement, bind.data)의 오류 : RS-DBI 드라이버 : ("in .1 "오류 : 구문 오류)" 친숙한가요? 그것은 SQL 문을 끈 상태에서 colClasses가 read.csv 메서드에서 작동 할 때 열 제거 기능을 사용하면 문제없이 작동하므로 SQL 문에서 구문을 벗어나는 것처럼 보입니다. 아이디어? 다시 한번 당신의 도움에 감사 드리며, 대단히 감사하겠습니다. –

관련 문제