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
是什么原因造成这种差异的其他列?
答
这是一个很好的例子以证明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()
。
你可能想'my_data [,.N,by = contnt]' –
感谢Mike,那很好。但我对为什么存在不一致感兴趣。 – Ashrith