我有以下数据.桌子
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
Within每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
其中,"COUNT"是每个"VAL"的记录/行数,"IDX"是每个"VAL"内的行索引.
我试着用.I
来处理which
和length
:
dt[, list(COUNT = length(VAL == VAL[.I]),
IDX = which(which(VAL == VAL[.I]) == .I))]
但这不起作用,因为.I
指的是一个有索引的向量,所以我想我们必须使用.I[]
.尽管在.I[]
中,我再次面临这个问题,我没有行索引,而且我知道(通过阅读data.table
常见问题解答和下面的帖子),如果可能的话,应该避免在行中循环.
那么,data.table
路是什么?