2017-09-18 4 views
-1

私は簡単なことに固執していますが、data.tableマニュアルまたはその周辺の解決策を見つけることができませんでした。data.tableカテゴリ別に索引付けされた行数

dt<-data.table(account=c("treu65","treu65","treg23","treg23","treg23"),year=c("2012","2013","2013","2013","2012")) 

アカウントと年ごとに行数を含む列を追加する必要があります。問題は、2つの別々の列を作成する必要があることです。一つはそうと同じように、2012年の2013年 のために他のカウントが含まれています:

account year count2012 count2013 
1: treu65 2012  1   1 
2: treu65 2013  1   1 
3: treg23 2013  1   2 
4: treg23 2013  1   2 
5: treg23 2012  1   2 

通常、私は集約しますが、この場合には、私は、上記と同様の構造を必要としています。 私は限りました:

dt[year==2012,count2012:=.N,.(account)] 
dt[year==2013,count2013:=.N,.(account)] 

しかし、私は今のNAを持っている:

account year count2012 count2013 
1: treu65 2012   1  NA 
2: treu65 2013  NA   1 
3: treg23 2013  NA   2 
4: treg23 2013  NA   2 
5: treg23 2012   1  NA 

そして、私が取得する必要があります。

account year count2012 count2013 
1: treu65 2012   1   1 
2: treu65 2013   1   1 
3: treg23 2013   1   2 
4: treg23 2013   1   2 
5: treg23 2012   1   2 

ありがとうございました。

あなたが i位置の行をカウントする j位置へと sumを使用します(これによってあなたが唯一の特定の行を変更することができるようになります)からフィルターを移動することができます
+0

なぜ 'count2013'は '1'を取得'treu65 2012'では' '2' 'treg23 2012'では? – PoGibas

+0

account == "treu65"&year == 2013の1行、account == "treg23"&year == "2013"の2行があるためです。 –

答えて

2

dt[, `:=`(count2012 = sum(year == 2012), count2013 = sum(year == 2013)), .(account)][] 

# account year count2012 count2013 
#1: treu65 2012   1   1 
#2: treu65 2013   1   1 
#3: treg23 2013   1   2 
#4: treg23 2013   1   2 
#5: treg23 2012   1   2 
+1

それは、ありがとう、働く。なぜ:=演算子が引用符で囲まれているのか、そして式の最後に角括弧の目的は何ですか? (まだ学習..)おかげで再び –

+0

きちんとした! +1 '...、。(アカウント)] []': ')の代わりに' ...、account] [] 'に単純化するのはどうですか? – PoGibas

+0

':= 'バックティックでは、演算子を書くための標準的な方法ですrでパラメータをとる関数これは ':='に限定されず、例えば、* + *のために* \ '+ \'(3,2)*を実行することもできます。複数の列を追加する必要があるため、ここではバックティックを使用しています。最後の '[]'は印刷目的のみのため、実際には必要ありません。 ':='はデフォルトでdata.tableを修正しているので、結果は表示されません。 – Psidom

関連する問題