r data.table:聚合分组列不一致

时间:2017-10-14 14:35:55

标签: r data.table

我正在使用data.table包来聚合一个列,该列也是一个分组列。但结果并不是我的预期。

my_data =  data.table(contnt=c("america", "asia", "asia","europe", "europe", "europe"), num= 1:6)

#my_data
#contnt  num
#america  1
#asia     2
#asia     3
#europe   4
#europe   5
#europe   6

my_data[, length(contnt),by=contnt]
#contnt  V1
#america  1
#asia     1
#europe   1

当我汇总除分组列

之外的列时,它的工作方式不同
my_data[, length(num),by=contnt]
#contnt  V1
#america  1
#asia     2
#europe   3

导致这种差异的原因是什么?

2 个答案:

答案 0 :(得分:6)

这是一个很好的例子,用于演示data.table将分组变量与其他变量分组到函数的方式:

my_data[,print(contnt),by=contnt]
# [1] "america"
# [1] "asia"
# [1] "europe"

my_data[,print(num),by=contnt]
# [1] 1
# [1] 2 3
# [1] 4 5 6

基本上,分组变量作为长度为1的向量传递给每个组,而对于其他变量,则传递每个组的整个向量。

答案 1 :(得分:2)

请研究data.table FAQ

  

在每个组中,为什么组变量length-1?

     

[...] x是一个分组变量,(从v1.6.1开始)长度为1(如果在j中检查或使用)。它的效率和便利 。 [...]

     

如果您需要当前组的大小,请使用.N,而不是在任何列上调用length()