在r中使用id列表将sql表组合到Dataframe中

ldxq2e6h  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(298)

我有一个与任何实际数据都没有关联的ID列表。我有一个sql数据库,其中每个id都有一个表,这些表中有一些数据,我想根据我拥有的id列表将这些数据组合到一个大的数据框中。我想到了一个 for 循环将需要这个,但我还没有能够得到它正常工作。
例如,我有一个id“1,2,3,4,5”的列表
我有一个sql数据库,每个数据库都有表,它们还有其他与id相关的数据。每个id有多个行和列。
我希望我的最终产品是这些行和列的组合,以便id列表位于r中的单个Dataframe中。我怎么能这么做?最有效的方法是什么?


# 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])
}

非常感谢您抽出时间。

xwbd5t1u

xwbd5t1u1#

我将扩大我的评论来完成这个问题。

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 . 如果表中已经包含了这个,那么可以省略 Map (底座)和 .id / idcol 论据。
(顺便说一句,这假设所有表都具有相同的精确结构:相同的列名和相同的数据类型。)

相关问题