如何强制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) )
当我使用.GRP计数器时,它以第1个组合开头。
Group_table <- setDT(example_data.table)[, label := .GRP, by = c("Var1", "Var2" )]
但是我想将 Var1 值设置为 4 ,将 Var2 值设置为 7 的组设置为相对值 1 ,然后下一个。
如何使用.GRP以 4 的 Var1 和 7 的 Var2 1 计数器和下一个顺序的计数器?
所以,我在想的是手动为所需的组合将计数器设为1,而对于其他组合,则从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