强制.GRP计数器从data.table中的2开始而不是1

时间:2019-02-21 14:43:46

标签: r data.table

如何强制data.table中的.GRP从2(而不是1)启动组计数器?

我有一个data.table,其中包含要按组顺序排序的组。

example_data.table <- data.table(Var1 = c(1,2,2,4,5,5,5), Var2 = c(1,2,3,7,1,2,3) )

enter image description here

当我使用.GRP计数器时,它以第1个组合开头。

Group_table   <- setDT(example_data.table)[, label := .GRP, by = c("Var1", "Var2" )]

enter image description here

但是我想将 Var1 值设置为 4 ,将 Var2 值设置为 7 的组设置为相对值 1 ,然后下一个。

enter image description here

如何使用.GRP以 4 Var1 7 Var2 1 计数器和下一个顺序的计数器?

所以,我在想的是手动为所需的组合将计数器设为1,而对于其他组合,则从2开始。还有其他方法,但我有点困惑。

2 个答案:

答案 0 :(得分:3)

如果只有一个带有Var1 = 4 & Var2 = 7的条目,则可以从.GRP中删除该条目,并使用replace将其替换为1,即

library(data.table)

dt1[-(which(dt1$Var1 == 4 & dt1$Var2 == 7)), Counter := .GRP + 1, by = c('Var1', 'Var2')][, 
                                                Counter := replace(Counter, is.na(Counter), 1)][]

给出,

   Var1 Var2 Counter
1:    1    1       2
2:    2    2       3
3:    2    3       4
4:    4    7       1
5:    5    1       5
6:    5    2       6
7:    5    3       7

答案 1 :(得分:3)

如果希望某些组“开始”计数,则可以在构建过程中使用order进行排序:

ex = copy(example_data.table)
ex[order(Var1 != 4, Var2 != 7), g := .GRP, by=.(Var1, Var2)][]

   Var1 Var2 g
1:    1    1 2
2:    2    2 3
3:    2    3 4
4:    4    7 1
5:    5    1 5
6:    5    2 6
7:    5    3 7