私は data.table の経験がないので、私の質問に対する解決策があるかどうかはわかりません (少なくとも Google で 30 分間は答えがありませんでした)。
data.frame では、次のコマンドを使用して、一意の値の観測数を確認することがよくあります。
df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
data.table を操作するときに対応する方法はありますか?
私は data.table の経験がないので、私の質問に対する解決策があるかどうかはわかりません (少なくとも Google で 30 分間は答えがありませんでした)。
data.frame では、次のコマンドを使用して、一意の値の観測数を確認することがよくあります。
df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
data.table を操作するときに対応する方法はありますか?
はいあります。data.table
幸い、 v1.8.2で追加されたの最新機能の1つについて質問されました。
:=
グループごとが実装され(FR#1491)、参照による新しい列へのサブ割り当てにより、列が自動的に追加されるようになりましNA
た(サブ割り当てが接触しない場所で初期化されます)(FR#1997)。:=
グループ別は、すべてのタイプと組み合わせることができるi
ため、グループ別には、:=
によるグループ化と。によるグループ化が含まi
れby
ます。グループ別は参照によるものであるため、(大きな)DTのコピーはまったく作成されないため、グループ化された結果をDTに:=
(直接的または間接的に)変換する方法よりも大幅に高速である必要があります。cbind
これは短くて自然な構文であり、他のクエリと組み合わせることができます。
DT[,newcol:=sum(colB),by=colA]
あなたの例、iiucでは、次のようになります。
DT[, Obs:=.N, by=ID-Date]
それ以外の :
df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))
グループごとは、大きなデータセットに適していることに注意してください:=
(データセットが小さいほど、小さなグループが多くなります)。
「参照」については、data.tableタグを参照?":="
して検索してください