R 根据数据帧的长度将数据帧分成相等的部分

R 根据数据帧的长度将数据帧分成相等的部分,r,split,dataframe,R,Split,Dataframe,问题:我需要将几个不同的大型数据帧(例如,50k行)划分为更小的块,每个块的行数相同。但是,我不想为每个数据集手动设置块的大小。相反,我希望代码: 检查数据帧的长度并确定有多少块 原始数据帧大约有几千行,可以分解为 最小化必须丢弃的“剩余”行数 这里提供的答案是相关的: 但是,我不想手动设置块大小。我想让代码找到“最佳”块大小,以最小化剩余部分 示例:(基于哈兰在上述链接中的回答) df$3:num[1:5000]0.2950.486-1.0850.5150.96。。。 >$4:num[1:

问题:我需要将几个不同的大型数据帧(例如,50k行)划分为更小的块,每个块的行数相同。但是,我不想为每个数据集手动设置块的大小。相反,我希望代码:

  • 检查数据帧的长度并确定有多少块 原始数据帧大约有几千行,可以分解为
  • 最小化必须丢弃的“剩余”行数
这里提供的答案是相关的:

但是,我不想手动设置块大小。我想让代码找到“最佳”块大小,以最小化剩余部分

示例:(基于哈兰在上述链接中的回答)

df$3:num[1:5000]0.2950.486-1.0850.5150.96。。。
>$4:num[1:5000]0.695-0.58-1.6761.0521.266。。。
>$5:num[1:752]-0.6468 0.1731 0.5788-0.0584 0.8479。。。

如果我选择了4100行的块大小,我将有5个块,剩余的252行。这更可取,因为我会丢弃更少的数据点。只要区块至少有几千行,我就不在乎它们到底有多大。

这里有一个蛮力方法(但非常快):

#data.frame的行数(来自您的示例…)

NROWS您需要决定至少一个子数据帧的“最佳”行的最大和最小行数。你不能对一个算法说“大概几千个”…如果没有对块的大小或最终得到的块的数量的限制,这个问题就没有很好的定义。例如,使用一个块大小等于
len(df)
(不等于
len(df)
)的最大素因子,将为您提供零剩余行,但您的块大小可能很小(我认为这不是所需的)。或者,使用等于
len(df)
的块大小也不会产生任何剩余行,但会产生非常大的块(可能也是不需要的)。我们可以说最少4000行,最多10000行吗?或者只使用
which.min(remainders)
如果你不想看到所有的可能性…找到4000到10000行之间的素数列表会有帮助吗?
df <- rnorm(20752)
max <- 20
x <- seq_along(df)
df <- split(df, ceiling(x/max))
str(df)
> List of 5
> $ 1: num [1:5000] -1.4 -0.496 -1.185 -2.071 -1.118 ...
> $ 2: num [1:5000] 0.522 1.607 -2.228 -2.044 0.997 ...
> $ 3: num [1:5000] 0.295 0.486 -1.085 0.515 0.96 ...
> $ 4: num [1:5000] 0.695 -0.58 -1.676 1.052 1.266 ...
> $ 5: num [1:752] -0.6468 0.1731 0.5788 -0.0584 0.8479 ...
# number of rows of your data.frame (from your example... )
nrows <- 20752

# acceptable range for sub-data.frame size
subSetSizes <- 4000:10000

remainders <- nrows %% subSetSizes 
minIndexes <- which(remainders == min(remainders))
chunckSizesHavingMinRemainder <- subSetSizes[minIndexes]

# > chunckSizesHavingMinRemainder
# [1] 5188

# the remainder of 20752 / 5188 is indeed 0 (the only minimum)
# nrows %% 5188 
# > [1] 0