繁体   English   中英

如何在多个数据集上循环浏览SQL查询?

[英]How to cycle through SQL query on multiple datasets?

我想简化一些我正在运行的代码。 我试图提取SQL查询产生的多个数据集的维度。 我想尝试遍历数据集名称

我已经能够获得理想的结果,只是不确定这是否是解决此问题的最有效方法:每个数据集都有单独的SQL查询行。

这是原始代码:

    library(sqldf)
    dim(sqldf("select Group1, count(*) as Count from Data1 group by Group1"))[1]
    dim(sqldf("select Group1, count(*) as Count from Data2 group by Group1"))[1]
    dim(sqldf("select Group1, count(*) as Count from DataN group by Group1"))[1]

这是我尝试简化代码的尝试:

    datalist=c(Data1,Data2,...DataN)
    abc=vector("list",length(datalist))
    for (i in seq_along(datalist))
      abc[[i]]=dim(sqldf("select Group1, count(*) as Count from datalist[i] group by Group1"))[1]

我希望输出为每个数据集显示N个数字,但会收到一条错误消息,内容为“无此表:数据列表”。

这是因为字符串中的“ datalist [i]”不会被datalist[i]变量的实际值代替,而是会传递给SQL。 尝试

datalist=c("Data1", "Data2", ... "DataN")
queries <- sprintf("select Group1, count(*) as Count from %s group by Group1", datalist)
abc <- lapply(queries, function(q) {
           nrow(sqldf(q))
         })

一些补充说明:

  • 不要for填充列表,请使用lapply直接生成列表
  • 如果您这样做,则无需初始化abc <- list()以外的abc <- list()
  • 不要使用dim(x)[1]nrow更明确
  • 如果您的数据始终是“ Data1”,“ Data2” ...等,也可以

     queries <- sprintf("select Group1, count(*) as Count from Data%d group by Group1", 1:10) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM