繁体   English   中英

R循环查询数据库中的所有表

[英]R loop to query all tables within a database

我是R的新手,有一个数据库DatabaseX ,其中包含多个表a,b,c,d,etc 我想使用R来计算所有这些表之间的公共属性message_id的行数,并将其分别存储。

我可以使用以下代码为所有表计算message_id

list<-dbListTables(con)
# print list of tables for testing
print(list)
for (i in 1:length(list)){
  query <- paste("SELECT COUNT(message_id) FROM ",list[i], sep = "")
  t <- dbGetQuery(con,query)
}
print(t)

打印:

### COUNT(message_id)
## 1  21519

但是我想保留每个表count(message_id)记录。 因此,例如表a = 200,b = 300,c = 500等。

任何建议如何做到这一点?

正如@ kaiten65建议的那样,一种选择是创建一个执行COUNT查询的帮助函数。 在循环之外,我定义了一个数字向量counts ,该counts将存储数据库中每个表的记录数。 然后,您可以在表上执行描述性统计信息以及此记录计数向量。

doCountQuery <- function(con, table) {
    query <- paste("SELECT COUNT(message_id) FROM ", table, sep = "")
    t     <- dbGetQuery(con, query)

    return(t)
}

list <- dbListTables(con)
counts <- numeric(0)       # this will store the counts for all tables

for (i in 1:length(list)) {
    count <- doCountQuery(con, list[i])
    counts[i] <- count[[1]]
}

您可以使用函数来实现所需的功能。 例如

readDB <- function(db, i){
     query <- paste("SELECT COUNT(message_id) FROM ",db, sep = "")
     t <- dbGetQuery(con,query)
     return(print(paste("Table ", i, " count:", t)
     }

list<-dbListTables(con)
for (i in 1:length(list)){
    readDB(list[i]);
}

这应该递归打印列表,但是实际代码在一个不错的可编辑函数中。 您的输出将是

 "Table 1 count: 2519"
 "Table 2 count: ---- "

有关R函数的更多信息,请访问: http : //www.statmethods.net/management/userfunctions.html

暂无
暂无

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

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