【问题标题】:Number of copies (duplicates) in R data.tableR data.table 中的副本数(重复)
【发布时间】: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


【解决方案1】:
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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2016-06-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多