【发布时间】:2015-09-11 14:57:12
【问题描述】:
我想在 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 分组时,第一组不应该包含两行数据吗?我了解“长度”是否不是要使用的功能,但我想不出任何其他要使用的功能。我想到了“nrow”,但我能传递给它什么呢?
【问题讨论】:
-
使用
.N。当您按colA分组时,每个组中的colA只是一个数字。 -
如
DT[, copies := .N, by=.(colA,colB)]
标签: r data.table