我正在使用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
导致这种差异的原因是什么?
答案 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()
。