如何在多个数据集上循环 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 个数字,但我收到一条错误消息 "no such table: datalist."
这是因为字符串中的 "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()
之外不需要初始化列表
- 不要使用
dim(x)[1]
,nrow
更明确
如果你的数据总是"Data1","Data2"...等等,你也可以
queries <- sprintf("select Group1, count(*) as Count from Data%d group by Group1", 1:10)
我想简化一些我是运行的代码。我正在尝试提取 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 个数字,但我收到一条错误消息 "no such table: datalist."
这是因为字符串中的 "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()
之外不需要初始化列表
- 不要使用
dim(x)[1]
,nrow
更明确 如果你的数据总是"Data1","Data2"...等等,你也可以
queries <- sprintf("select Group1, count(*) as Count from Data%d group by Group1", 1:10)