将数据集拆分为任意部分

Splitting a Dataset into Arbitrary Sections

我有这个数据集:

var_1 = rnorm(1000,1000,1000)
var_2 = rnorm(1000,1000,1000)
var_3 = rnorm(1000,1000,1000)

sample_data = data.frame(var_1, var_2, var_3)

我想将这个数据集拆分成 10 个不同的数据集(每个包含 100 行),然后将它们上传到服务器上。

我知道怎么做:

sample_1 = sample_data[1:100,]
sample_2 = sample_data[101:200,]
sample_3 = sample_data[201:300,]

# etc.

library(DBI)

#establish connection (my_connection)

dbWriteTable(my_connection,  SQL("sample_1"), sample_1)
dbWriteTable(my_connection,  SQL("sample_2"), sample_2)
dbWriteTable(my_connection,  SQL("sample_3"), sample_3)

# etc

有没有办法“更快”地做到这一点?

我想到了一个通用的方法来做到这一点 - 但我不确定如何正确地为此编写代码:

i = seq(1:1000, by = 100)
j = 1 - 99
{
sample_i = sample_data[ i:j,]

dbWriteTable(my_connection,  SQL("sample_i"), sample_i)
}

有人可以帮我解决这个问题吗?

谢谢!

下面是一个使用 SQLite 数据库引擎的例子。我们将从您的示例数据集开始:

var_1 = rnorm(1000,1000,1000)
var_2 = rnorm(1000,1000,1000)
var_3 = rnorm(1000,1000,1000)

sample_data = data.frame(var_1, var_2, var_3)

现在我们将使用 split() 将您的大型数据框分成 10 个数据框的列表。结果将存储在列表中:

list_of_dfs <- split(
  sample_data, (seq(nrow(sample_data))-1) %/% 100
)

我们将使用数据库中 table 的名称创建一个向量。在这里,我只是用名称 sample_1sample_2

制作简单的矢量
table_names <- paste0("sample_", 1:10)

现在我们已准备好写入数据库。我们将建立连接,然后同时遍历数据帧列表和 table 名称的向量,每次调用 dbWriteTable()

connection <- dbConnect(RSQLite::SQLite(), dbname = "test.db")
map2(
  table_names, 
  list_of_dfs, 
  function(x,y) dbWriteTable(connection, x, y)
)