2017-10-14 77 views
2

我正在使用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

回答

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的向量傳遞的每個組,而對於其他變量,每個組的整個向量都被傳遞。

2

請研究data.table FAQ

每個組裏面,爲什麼組變量長度-1?

x是一個分組變量,並且(從v1.6.1開始)的長度爲1(如果在j中進行了檢查或使用)。這是效率和方便。 [...]

如果您需要當前組的大小,請使用.N而不是在任何列上調用length()