按 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)
以获得相同的效果。)
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)
以获得相同的效果。)