将一个数据帧分成许多名称在 R 中
Dividing one dataframe into many with names in R
我有一些大数据框,大到足以在我的机器上突破 R 的极限;例如,我目前正在处理的是 2 列乘以 7000 万行。内容并不重要,但以防万一,第 1 列是字符串,第 2 列是整数。
我想做的是将该数据框分成 n 个部分(比如 20 个,但最好是可以根据具体情况进行更改的部分),以便我可以处理每个较小的数据一次画一个框。这意味着 (a) 结果必须产生命名的东西(例如,“newdf_1”、“newdf_2”、...“newdf_20”或其他东西),以及(b) 原始数据框中的每一行都需要在一个(并且只有一个)新的“子”数据框中。顺序无关紧要,但按行顺序进行对我来说很有意义。
完成工作后,我将开始重新组合它们(使用 rbind()
)一次一对。
我看过 split()
,但据我所知,它是设计用于处理因素(我没有)。
有什么想法吗?
这是一个基于 tidyverse
的解决方案。尝试使用 read_csv_chunked()
.
# practice data
tibble(string = sample(letters, 1e6, replace = TRUE),
value = rnorm(1e6) %>%
write_csv("test.csv")
# here's the solution
partial_data <- read_csv_chunked("test.csv",
DataFrameCallback$new(function(x, pos) filter(x, string == "a")),
chunk_size = 1000)
您可以将对 read_csv_chunked
的调用包装在一个函数中,您可以在该函数中更改子集所在的字符串。
这或多或少是对这个问题的重复:
How to read only lines that fulfil a condition from a csv into R?
您可以创建一个新列并根据该列拆分数据框。该列不需要是因子,但需要是可以通过split
函数转换为因子的数据类型。
# Number of groups
N <- 20
dat$group <- 1:nrow(dat) %% N
# Add 1 to group
dat$group <- dat$group + 1
# Split the dat by group
dat_list <- split(dat, f = ~group)
# Set the name of the list
names(dat_list) <- paste0("newdf_", 1:N)
数据
set.seed(123)
# Create example data frame
dat <- data.frame(
A = sample(letters, size = 70000000, replace = TRUE),
B = rpois(70000000, lambda = 1)
)
我有一些大数据框,大到足以在我的机器上突破 R 的极限;例如,我目前正在处理的是 2 列乘以 7000 万行。内容并不重要,但以防万一,第 1 列是字符串,第 2 列是整数。
我想做的是将该数据框分成 n 个部分(比如 20 个,但最好是可以根据具体情况进行更改的部分),以便我可以处理每个较小的数据一次画一个框。这意味着 (a) 结果必须产生命名的东西(例如,“newdf_1”、“newdf_2”、...“newdf_20”或其他东西),以及(b) 原始数据框中的每一行都需要在一个(并且只有一个)新的“子”数据框中。顺序无关紧要,但按行顺序进行对我来说很有意义。
完成工作后,我将开始重新组合它们(使用 rbind()
)一次一对。
我看过 split()
,但据我所知,它是设计用于处理因素(我没有)。
有什么想法吗?
这是一个基于 tidyverse
的解决方案。尝试使用 read_csv_chunked()
.
# practice data
tibble(string = sample(letters, 1e6, replace = TRUE),
value = rnorm(1e6) %>%
write_csv("test.csv")
# here's the solution
partial_data <- read_csv_chunked("test.csv",
DataFrameCallback$new(function(x, pos) filter(x, string == "a")),
chunk_size = 1000)
您可以将对 read_csv_chunked
的调用包装在一个函数中,您可以在该函数中更改子集所在的字符串。
这或多或少是对这个问题的重复: How to read only lines that fulfil a condition from a csv into R?
您可以创建一个新列并根据该列拆分数据框。该列不需要是因子,但需要是可以通过split
函数转换为因子的数据类型。
# Number of groups
N <- 20
dat$group <- 1:nrow(dat) %% N
# Add 1 to group
dat$group <- dat$group + 1
# Split the dat by group
dat_list <- split(dat, f = ~group)
# Set the name of the list
names(dat_list) <- paste0("newdf_", 1:N)
数据
set.seed(123)
# Create example data frame
dat <- data.frame(
A = sample(letters, size = 70000000, replace = TRUE),
B = rpois(70000000, lambda = 1)
)