R data.table 中的拷贝数(duplicates)

Number of copies (duplicates) in R data.table

我想在 data.table 中添加一列,显示每行存在多少个副本。举个例子:

library(data.table)
DT <- data.table(id = 1:10, colA = c(1,1,2,3,4,5,6,7,7,7), colB = c(1,1,2,3,4,5,6,7,8,8))
setkey(DT, colA, colB)
DT[, copies := length(colA), by = .(colA, colB)]

它给出的输出是

   id colA colB copies
 1:  1    1    1      1
 2:  2    1    1      1
 3:  3    2    2      1
 4:  4    3    3      1
 5:  5    4    4      1
 6:  6    5    5      1
 7:  7    6    6      1
 8:  8    7    7      1
 9:  9    7    8      1
10: 10    7    8      1

期望的输出是:

   id colA colB copies
 1:  1    1    1      2
 2:  2    1    1      2
 3:  3    2    2      1
 4:  4    3    3      1
 5:  5    4    4      1
 6:  6    5    5      1
 7:  7    6    6      1
 8:  8    7    7      1
 9:  9    7    8      2
10: 10    7    8      2

我应该怎么做?

我也想知道为什么我的方法不行。工作。按colA 和colB 分组时,第一组不是应该包含两行数据吗?我知道 if "length" 不是要使用的函数,但我想不出要使用的任何其他函数。我想到了 "nrow" 但我可以传递给它什么?

DT[, copies := .N, by=.(colA,colB)]
#     id colA colB copies
#  1:  1    1    1      2
#  2:  2    1    1      2
#  3:  3    2    2      1
#  4:  4    3    3      1
#  5:  5    4    4      1
#  6:  6    5    5      1
#  7:  7    6    6      1
#  8:  8    7    7      1
#  9:  9    7    8      2
# 10: 10    7    8      2

如评论中所述,.N 将计算 by 参数中定义的分组对象的长度。