将数据集拆分为任意部分
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_1
、sample_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)
)
我有这个数据集:
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_1
、sample_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)
)