R data.table中的副本数量(重复数)

时间:2015-09-11 14:57:12

标签: 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分组时,第一组应该包含两行数据吗?我理解是否&#34;长度&#34;不是要使用的功能,但我想不出任何其他功能可以使用。我想到了&#34; nrow&#34;但是我可以传递给它什么呢?

1 个答案:

答案 0 :(得分:4)

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参数中定义的分组对象的长度。