2016-05-09 10 views
1

Ich habe an dieser Funktion gearbeitet, die versucht, alle Haushalte mit mindestens einem von LA zu erhalten. Wenn ich das Paket data.table verwende, ist es möglich, die Funktion mit guten Ergebnissen hochzuladen und auszuführen, aber aufgrund von Speicherproblemen benutze ich postgreSQL und hier wird das Problem.R und postgreSQL Tabellenoperation

 
    year sample serial pernum wtper relate birthyr bplctry 
    2005 8406 1244876000 3 75 4 NA 24040 
    2005 8406 1244877000 1 62 1 NA 22010 
    2005 8406 1244877000 2 67 2 NA 24040 
    2005 8406 1244878000 1 137 1 NA 24040 
    2005 8406 1244878000 2 130 2 NA 24040 
    2005 8406 1244878000 3 149 3 NA 24040 

> paises 
[1] 21080 21100 21130 22020 22030 22040 22050 22060 22070 22080 
23010 23020 23030 23040 23050 23060 23100 23110 23130 23140 

Dann werden die Lese (Werke) ...

eine PostgreSQL-Instanz erstellen und eine Verbindung erstellen.

m <- dbDriver("PostgreSQL") 

con <- dbConnect(m, user="postgres", password="xxxx", dbname="IPUMS", host='localhost', port=5432) 

mig_db <- src_postgres(dbname = 'IPUMS', user = 'postgres', password = 'xxxx') 

Dann hier habe ich versucht, mit einem LA alle Haushalte zu erhalten. (Das Teil funktioniert, wenn ich USA mit fread Funktion von data.table pckg lesen, aber hier ist der Code für die SQL-Anweisung)

USA <- tbl(mig_db, sql('SELECT * FROM namerica')) 

paises.n <- fread('paises.csv',header=T, sep=',', data.table=F) 

paises <- paises.n$code 

Hier ist das Problem, die Funktion eine logische Vektor zurückgibt (logische (0)) für USA $ latino:

USA$latino <- ifelse(USA$bplctry %in% paises, 'LA', 'otro') 

la <- USA[USA$latino == 'LA', ] 

id <- unique(la$serial) 

usa.new <- USA[USA$serial %in% id,] 

Antwort

0

Sie sollten versuchen, die dbGetQuery Funktion in der RPostgreSQL Bibliothek

dbGetQuery(con, "Select * from namerica")