通过在R中分组变量避免循环

通过在R中分组变量避免循环,r,loops,R,Loops,我是R的新手,已经被一个问题困扰了很长一段时间。。。 我有一个大数据集(最初是网格数据),有超过1000000个观察值,必须为我的元素创建一个组变量。 我的数据集如下所示: ID Var1 1 0,5 2 0,6 3 0,2 4 0,15 ... ... 1029600 0,43 我现在想要的是按照以下方案分组: 1 2 3 4 5

我是R的新手,已经被一个问题困扰了很长一段时间。。。 我有一个大数据集(最初是网格数据),有超过1000000个观察值,必须为我的元素创建一个组变量。 我的数据集如下所示:

ID        Var1
1         0,5 
2         0,6 
3         0,2 
4         0,15
...       ... 
1029600   0,43
我现在想要的是按照以下方案分组:

1       2       3       4       5       6      ...   4320
4321    4322    4322    4322    4322    4322   ...   8640
8641    8642    8643    8644    8645    8646   ...   12960
12961    12962  12963   12964   12965   12966  ...   17280
17281   17282   17283   17284   17285   17286  ...   21600
21601   21602   21603   21604   21605   21606  ...   25920
...      ...     ...    ...     ...     ...    ...    ...
1025281 1025282 1025283 1025284 1025285 1025286...   1029600
其中36个数字{1,2,3,4,5,643214322432343244325432686442,…,21060}是第一组。 第二组是{7,8,9,10,11,1243274328,…,21612}。第三组将以{13,14,15…}开始。诸如此类的所有观察结果。我希望我能明确我的目标是什么。我想用图片来形象化它,但作为一名新成员,这是不可能的

到目前为止,我成功地使用了一个非常丑陋的循环函数,如下所示:

for(k in 0:40) { 
    nk <- 25920 * k
    mk <- 720 * k
    for (j in 0:719) {
        cj <- j * 6
        for (i in 0:5) { 
            ai <- i * 4320 + 1 + cj + nk
            bi <- i * 4320 + 6 + cj + nk
            group[ai:bi] <- 1 + j + mk
        }
    }
} 
(0:40中的k){code>
nk您可以通过一个简单的公式从ID中获取组:

group创建样本数据

dtf <- data.frame(ID = 1:1e4, Var1 = rnorm(1:1e4))
第二组

dtfsplit[2]

我很困惑。为了澄清,我正确地理解了这个问题:您是否希望根据IDs在矩阵子矩阵中的位置,使用连续ID向您的数据帧添加分组因子?您的问题不是很清楚,但听起来您想要类似于要求的东西
dtfsplit <- split(dtf, group)
> dtfsplit[1]
$`1`
       ID     Var1
1       1  0.56655
2       2  0.87645
3       3 -1.41986
4       4 -1.84881
5       5  0.03233
6       6  3.06512
4321 4321 -1.57179
4322 4322 -1.09958
4323 4323  0.55980
4324 4324  0.32390
4325 4325  0.85438
4326 4326 -0.10311
8641 8641  2.08886
8642 8642  1.19836
8643 8643  0.52592
8644 8644  0.20571
8645 8645  1.08429
8646 8646  0.69648
dtfsplit[2]