统计每组中的logging数并生成行号
我有以下data.table
set.seed(1) DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE)) VAL 1: 1 2: 2 3: 2 4: 3 5: 1 6: 3 7: 3 8: 2 9: 2 10: 1
在 VAL
每个数字中,我想:
- 统计logging/行数
- 创build第一个,第二个,第三个出现的行索引(计数器)等。
最后我想要结果
VAL COUNT IDX 1: 1 3 1 2: 2 4 1 3: 2 4 2 4: 3 3 1 5: 1 3 2 6: 3 3 2 7: 3 3 3 8: 2 4 3 9: 2 4 4 10: 1 3 3
其中“COUNT”是每个“VAL”的logging/行数,“IDX”是每个“VAL”中的行索引。
我试着用which
和length
来使用.I
:
dt[, list(COUNT = length(VAL == VAL[.I]), IDX = which(which(VAL == VAL[.I]) == .I))]
但是这不起作用.I
指的是一个带有索引的向量,所以我想我必须使用.I[]
。 虽然里面.I[]
我.I[]
再次面临的问题,我没有行索引,我知道(从阅读data.table
常见问题,并在这里的post后面)循环行应尽可能避免。
那么, data.table
方式是什么?
使用.N
…
DT[ , `:=`( COUNT = .N , IDX = 1:.N ) , by = VAL ] # VAL COUNT IDX # 1: 1 3 1 # 2: 2 4 1 # 3: 2 4 2 # 4: 3 3 1 # 5: 1 3 2 # 6: 3 3 2 # 7: 3 3 3 # 8: 2 4 3 # 9: 2 4 4 #10: 1 3 3
.N
是每个组中logging的数量,组由"VAL"
定义。