我是R的新手,拥有一个包含多个表DatabaseX
的数据库a,b,c,d,etc
。我想使用R来计算所有这些表中公共属性message_id
的行数,并将其单独存储。
我可以使用以下代码计算{{1>} 所有表格:
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
的记录。因此,例如表a = 200,b = 300,c = 500等。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:1)
正如@ kaiten65建议的那样,一个选项是创建一个执行COUNT
查询的辅助函数。在循环之外,我定义了一个数字向量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]]
}
答案 1 :(得分:0)
您可以使用功能来实现您的需求。例如
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