Ben*_*ker 32
制作自己的分组变量.
d <- split(my_data_frame,rep(1:400,each=1000))
Run Code Online (Sandbox Code Playgroud)
你也应该考虑ddply从功能plyr包,或group_by()从功能dplyr.
在哈德利的评论之后为简洁而编辑.
如果您不知道数据框中有多少行,或者数据框可能与您所需的块大小的长度不相等,您可以执行此操作
chunk <- 1000
n <- nrow(my_data_frame)
r <- rep(1:ceiling(n/chunk),each=chunk)[1:n]
d <- split(my_data_frame,r)
Run Code Online (Sandbox Code Playgroud)
你也可以用
r <- ggplot2::cut_width(1:n,chunk,boundary=0)
Run Code Online (Sandbox Code Playgroud)
对于未来的读者来说,基于dplyr和data.table包的方法可能(更快)在数据帧上进行分组操作.
小智 9
我有一个类似的问题并使用了这个:
library(tidyverse)
n = 100 #number of groups
split <- df %>% group_by(row_number() %/% n) %>% group_map(~ .x)
Run Code Online (Sandbox Code Playgroud)
从左到右:
splitdf您从输入数据框开始row_number然后使用模除法除以n(组数)来对数据进行分组。group_map返回列表的函数即可。所以最后你split是一个列表,每个元素中都有一组数据集。另一方面,您也可以通过将调用替换为group_map例如来立即写入数据group_walk(~ write_csv(.x, paste0("file_", .y, ".csv")))。
您可以在以下位置找到有关这些强大工具的更多信息: 解释 group_by 的 dplyr 备忘单 以及下面的: group_map、group_walk 后续函数