将所有MYSQL表加载到具有相同名称的数据框中

时间:2017-05-22 19:30:12

标签: r rmysql

我已经使用以下代码成功地将所有MySQL表加载到尽可能多的数据框变量中,所有数据框变量都与表名相同(这是个人学习)。我的问题是:有没有更好的方法,因为我觉得这很慢。

db<-dbConnect(MySQL(),user='****',password="****",dbname="****",host='XX.XXX.XXX.XX') 

  tables<-dbListTables(db)

  #load all tables in variables with same name as the MySQL table name. 
  #warning : this loop will take more than 90 seconds to complete and will download all the MySQL tables.
  for (i in 1:NROW(tables)){
    assign(tables[i],dbReadTable(db,tables[i]))
  }

#release the DB
  dbDisconnect(db)

这是地球上最快的方法吗?

1 个答案:

答案 0 :(得分:3)

如图所示,请考虑将所有MySQL表保存到许多数据帧的 one 列表中,这样可以避免在全局环境中管理许多对象。下面甚至将列表元素命名为相应的表名,可以使用ConstraintLayout$索引来引用:

[[..]]

因此,您可以按索引访问每个数据框并运行任何数据框操作,就像它们是独立的对象一样:

# DATA FRAME LIST OF NAMED ELEMENTS
dfList <- setNames(lapply(tables, function(t) dbReadTable(db, t)), tables)

dfList$table1Name    
dfList[["table2Name"]]    
...

现在,如果您确实想要多个变量,请使用aggregate(.~Group1 + Group2, dfList$table1Name, FUN=sum) merge(dfList$table1Name, dfList$table2Name, by="joinkey") by(dfList$table1Name, dfList$table1Name[c("factor1", "factor2")], FUN=summary) 将列表元素输出到单独的对象:

list2env