按 data.table 中的 "n" 个连续整数对变量进行分组

Group variable by "n" consecutive integers in data.table

library(data.table)

DT <- data.table(var = 1:100)

我想创建第二个变量 group,它将 var 中的值按 n 个连续整数分组。因此,如果 n 等于 1,它将 return 与 var 相同的列。如果n=2,那就return 我:

  var   group
1:   1   1
2:   2   1
3:   3   2
4:   4   2
5:   5   3
6:   6   3

如果n=3,会return 我:

  var   group
1:   1   1
2:   2   1
3:   3   1
4:   4   2
5:   5   2
6:   6   2

等等。我想尽可能灵活地做到这一点。

注意可能有重复值:

  var   group
1:   1   1
2:   1   1
3:   2   1
4:   3   2
5:   3   2
6:   4   2

这里group对应n=2.谢谢!

我想我们可以用 findInterval 来做这个:

DT <- data.table(var = c(1L, 1:10))

n <- 2
DT[, group := findInterval(var, seq(min(var), max(var) + n, by = n))]
#       var group
#     <int> <int>
#  1:     1     1
#  2:     1     1
#  3:     2     1
#  4:     3     2
#  5:     4     2
#  6:     5     3
#  7:     6     3
#  8:     7     4
#  9:     8     4
# 10:     9     5
# 11:    10     5

n <- 3
DT[, group := findInterval(var, seq(min(var), max(var) + n, by = n))]
#       var group
#     <int> <int>
#  1:     1     1
#  2:     1     1
#  3:     2     1
#  4:     3     1
#  5:     4     2
#  6:     5     2
#  7:     6     2
#  8:     7     3
#  9:     8     3
# 10:     9     3
# 11:    10     4

(调用 seq 中的 +n 是为了让我们总是比我们需要的多一点;如果我们只做 seq(min(.),max(.),by=n),则可能是最高的var 的值将在序列之外。也可以执行 c(seq(min(.), max(.), by=n), Inf) 以获得相同的效果。)