这与Create sequential counter that restarts on a condition within panel data groups有些相关和 data.table "key indices" or "group counter" , 但不完全相同。
# data table:
x y i d
1: A B 1 1
2: A B 1 1
3: A C 2 2
4: A D 3 3
5: B A 1 4
6: B A 1 4
7: C A 1 4
8: C A 1 4
9: C B 2 5
10: C C 3 6
11: C C 3 6
12: C D 4 7
使用 dt[, d:= .GRP, by = .(x,y)]
可以生成最后一列。然而,我正在寻找一个在每个 x
组中重新启动的计数器。请参阅列 i
以获得所需的结果。
您可以在按 x
分组的 y
列上使用 rleid
函数来实现这一点。 rleid
是一种计数器,每次发生变化时都会增加,否则保持不变
library(data.table)
tab <- fread("
x y i d
A B 1 1
A B 1 1
A C 2 2
A D 3 3
B A 1 4
B A 1 4
C A 1 4
C A 1 4
C B 2 5
C C 3 6
C C 3 6
C D 4 7")
dt <- tab[, .(x, y, i)]
dt[, d:= rleid(y), by = .(x)]
dt
#> x y i d
#> 1: A B 1 1
#> 2: A B 1 1
#> 3: A C 2 2
#> 4: A D 3 3
#> 5: B A 1 1
#> 6: B A 1 1
#> 7: C A 1 1
#> 8: C A 1 1
#> 9: C B 2 2
#> 10: C C 3 3
#> 11: C C 3 3
#> 12: C D 4 4
由 reprex package 创建于 2018-06-03 (v0.2.0).