Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 统计记录数并在data.table中的每个组内生成行号_R_Data.table - Fatal编程技术网

R 统计记录数并在data.table中的每个组内生成行号

R 统计记录数并在data.table中的每个组内生成行号,r,data.table,R,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 其中,“COUNT”是每个“VAL”的记录/行数,“IDX”是每个“VAL”内的行索引 我尝试使用使用和长度工作 dt[, list(COUNT =

我有以下数据表

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
其中,“COUNT”是每个“VAL”的记录/行数,“IDX”是每个“VAL”内的行索引

我尝试使用
使用
长度
工作

 dt[, list(COUNT = length(VAL == VAL[.I]), 
             IDX = which(which(VAL == VAL[.I]) == .I))]
但这不起作用,因为
.I
指的是带有索引的向量,所以我想必须使用
.I[]
。虽然在
.I[]
内部,我再次面临问题,我没有行索引,并且我确实知道(通过阅读
data.table
FAQ和下面的文章),如果可能的话,应该避免行循环


那么,
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
是每个组中的记录数,组由
“VAL”

+1定义。和
.N、.I
和其他特殊符号记录在
?`.[.data.table`
@Frank I以一种似乎过于复杂的方式附加了这个问题:)最好
seq\u len(.N)
而不是
1:.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