2017-10-14 15 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

ありがとうマイク、それはうまく動作します。しかし、なぜ私は矛盾があるのか​​興味がありました。 – Ashrith

答えて

6

これはdata.tableが関数にグループ化変数対他の変数を渡す方法を実証するための優れた例である。ためのに対し、本質的に、グループ化変数は、グループごとに長さ1のベクトルとして渡され

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 

を他の変数では、各グループのベクトル全体が渡されます。

2

data.table FAQ勉強してください:各グループ内

を、なぜ長-1グループ変数がありますか?

[...] xはグループ化変数であり、v1.6.1からの長さは1です(jで検査または使用されている場合)。効率性と利便性のためにはです。 [...]

現在のグループのサイズが必要な場合は、任意の列にlength()を呼び出すのではなく、.Nを使用します。

関連する問題