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

问题描述:

我正在使用data.table软件包来聚合也是分组列的列。但结果并非我所期望的。r 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 

是什么原因造成这种差异的其他列?

+3

你可能想'my_data [,.N,by = contnt]' –

+0

感谢Mike,那很好。但我对为什么存在不一致感兴趣。 – Ashrith

这是一个很好的例子以证明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的向量传递的每个组,而对于其他变量,每个组的整个向量都被传递。

请研究data.table FAQ

每个组里面,为什么组变量长度-1?

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

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