使用 ID 列表将 SQL 表组合成 R 中的数据框

Using a list of IDs to combine SQL tables into a data frame in R

我有一个与任何实际数据无关的 ID 列表。我有一个 SQL 数据库,其中每个 ID 都有一个 table,而那些 table 的数据我想根据列表合并到一个大数据框中我有的身份证。我认为为此需要一个 for 循环,但我无法使其正常工作。

例如我有一个 ID 列表" 1,2,3,4,5

我有一个 SQL 数据库,每个数据库都有 table,它们还有与 ID 关联的其他数据。每个 ID 都有多个行和列。

我希望我的最终产品是那些行和列的组合,以便 ID 列表位于 r 中的单个数据框中。我怎么能这样做?最有效的方法是什么?

#Example data set
library(lubridate)
date <- rep_len(seq(dmy("26-12-2010"), dmy("20-12-2011"), by = "days"), 500)
ID <- rep(seq(1, 5), 100)

df <- data.frame(date = date,
                 x = runif(length(date), min = 60000, max = 80000),
                 y = runif(length(date), min = 800000, max = 900000),
                 ID)

for (i in 1: length(ID)){
  ID[i] <- dbReadTable(mydb, ID[i])
}

非常感谢您的宝贵时间。

我将展开我的评论以完成问题。

IDs <- lapply(setNames(nm=ID), function(i) dbReadTable(mydb, i)) 

然后是以下之一:

## base R
IDs <- Map(function(x, nm) transform(x, id = nm), IDs, names(IDs))
DF <- do.call(rbind, IDs)

## dplyr
DF <- dplyr::bind_rows(IDs, .id = "id")

## data.table
DF <- data.table::rbindlist(IDs, idcol = "id")

添加 "id" 列是为了根据来源 ID 轻松区分行。如果 table 已经包含了它,那么你可以省略 Map (基础)和 .id/idcol 参数。

(顺便说一下,假设所有 table 都具有完全相同的结构:相同的列名和相同的数据类型。)