使用 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 都具有完全相同的结构:相同的列名和相同的数据类型。)
我有一个与任何实际数据无关的 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 都具有完全相同的结构:相同的列名和相同的数据类型。)