我有很多大数据帧。例如使用较小的那些:
dim(ch29)
476 4283
我需要将它拆分成更小的部分(即最多为241列的子集)。当我想分析这些较小的子集时,我的问题就出现了。
我不知道如何将 大日期框架 分组为 较小的数据框 和< strong> 不仅仅是一个列表 。
我还希望在循环中完成所有这些操作,并在循环中为新创建的较小数据帧提供唯一名称。
chunk=241
df<-ch29
n<-ceiling(ncol(df)/chunk)
for (i in 1:n) {
xname <- paste("ch29", i, sep="_")
cat("_", xname)
assign(xname, split(df, rep(1:n, each=chunk, length.out=ncol(df))))
}
答案 0 :(得分:2)
我不确定你要做什么,或者你想如何选择每个数据框中的列,但这里有一个选项的例子:
# Fake data
set.seed(100)
ch29 = as.data.frame(replicate(4283, rnorm(476)))
# Number of columns we want in each split data frame
ncols = floor(ncol(ch29)/20)
# Start column for each split data frame
start = seq(1,ncol(ch29),ncols)
# Split ch29 into a bunch of separate data frames
df.list = lapply(setNames(start, paste0("ch29_", start, "_", start+ncols-1)),
function(i) ch29[ , i:min(i+ncols-1,ncol(ch29))])
您现在有一个列表df.list
,其中每个列表元素都是ncols
列ch29
列的数据框,但列表的最后一个元素除外1和ncols
列。此外,每个列表元素的名称是父数据框的名称(ch29
)以及从中绘制子集数据框的列范围。
答案 1 :(得分:1)
尝试
for (i in 1:3) { # i = 1
xname = paste("ch29", i, sep = "_")
col.min = (i - 1) * chunk + 1
col.max = min(i * chunk, ncol(df))
assign(xname, df[,col.min:col.max])
}
换句话说,使用符号df[,a:b]
,其中a < b
,以获取仅包含df
列到a
的数据帧b
的子集