将数据表拆分为小表R

将数据表拆分为小表R,r,split,dataframe,R,Split,Dataframe,我有一个下表(超过1k行): 我需要根据第二列x2将这个表拆分为小表(作为数据帧在我的环境中)。 我试过做split(dat,dat$x2),R做得很好,但在列表中 如果你这样做 split_list <- split(dat,dat$x2) 转换结果 # to a data.frame df1 <- as.data.frame(split_list[[1]]) # to a table t1 <- as.table(split_list[[1]]) #到data.fra

我有一个下表(超过1k行):

我需要根据第二列
x2
将这个表拆分为小表(作为数据帧在我的环境中)。 我试过做
split(dat,dat$x2)
,R做得很好,但在列表中

如果你这样做

split_list <- split(dat,dat$x2)
转换结果

# to a data.frame
df1 <- as.data.frame(split_list[[1]])

# to a table
t1 <- as.table(split_list[[1]])
#到data.frame

我知道这个问题有点老了。我最近遇到了一个类似的问题,仍然想分享代码

我想将
数据表
分成大小相等的块。通过将
data.table
的行总数除以我打算接收的较小
data.table
的行数,预先计算出的块数。我编写了一个函数,将
数据表
(输入
x
)拆分为行数相等的块数(
每帧无行
),并放置一个用于存储帧的路径(
路径到存储

我需要它来手动收集块的变量。但您可以重写它,只需分别返回所有
数据.table
s。或者更好,根据@David Arenburg的回答:将其存储在列表中,不要污染全球环境。注意:代码可能没有效率,因为它使用了一个循环,但对于包含近500k个观察值的样本来说,速度相当快(如
data.table
is)


#功能:分成大小相等的样本进行手工采集

按照您自己所说的“R做得对,但在列表中”拆分数据表。R确实做对了,并将其保存在列表格式中,因为用大量数据集污染全球环境是错误的。明白了,如何循环700多个结果?
split_list[[1]]
split_list[[2]]
....
# to a data.frame
df1 <- as.data.frame(split_list[[1]])

# to a table
t1 <- as.table(split_list[[1]])
names1 <- names(split_list)

for(i in seq_along(names1)){
  assign(names1[i], split_list[[i]])
}

# function: split into equally-sized samples for handcollection
split_data_table <- function(x, no_rows_per_frame, path_to_store){

  split_vec <- seq(1, nrow(x), no_rows_per_frame)

  for (split_cut in split_vec) {
    sample <- x[split_cut:(split_cut+(no_rows_per_frame-1))]
    fwrite(sample, paste(path_to_store, "sample_until_", (split_cut+(no_rows_per_frame-1)), ".csv", sep = ""))
  }
}

# apply sample cut
split_data_table(x = vendor_tab, no_rows_per_frame = 5000, 
                 path_to_store = "C/...")