我是R的新手,现在已经困扰了一段时间……我有一个大型数据集(最初是栅格数据),具有超过1,000,000个观察值,并且必须为我的元素制作一个组变量。我的数据集如下所示:
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,6,4321,4322,4323,4324,4325,4326,8641,8642,...,21060}是第一组。第二组将是{7,8,9,10,11,12,4327,4328,...,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
}
}
}
我知道这是非常低效的,并且用循环来计算它需要很长时间。我敢肯定,有一种更简单的方法可以解决我的问题,但是由于我是R语言的新手,所以我自己找不到它。
任何帮助将非常感激。先感谢您!
您可以使用简单的公式从ID中获取组:
group <- (((ID-1) %% 4320) %/% 6) +1
注意,这%%
是模运算,%/%
是整数除法。该公式应为您提供从1开始编号的组。无需将其包括在循环中,这是向量化操作。
有很多方法可以做到这一点(例如将1:1029600重塑为具有4320列的矩阵并采用6 * N:6 *(N + 1)列并进行匹配等操作),这就是为什么您应该始终停止想一想您真正想做什么。并意识到它归结为一点算术:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句