将数据表拆分为小表R
我有一个下表(超过1k行): 我需要根据第二列将数据表拆分为小表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
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/...")