3

私は data.table の経験がないので、私の質問に対する解決策があるかどうかはわかりません (少なくとも Google で 30 分間は答えがありませんでした)。

data.frame では、次のコマンドを使用して、一意の値の観測数を確認することがよくあります。

df$Obs=with(df, ave(v1, ID-Date, FUN=function(x) length(unique(x))))  

data.table を操作するときに対応する方法はありますか?

4

1 に答える 1

5

はいあります。data.table幸い、 v1.8.2で追加されたの最新機能の1つについて質問されました。

:=グループごとが実装され(FR#1491)、参照による新しい列へのサブ割り当てにより、列が自動的に追加されるようになりましNAた(サブ割り当てが接触しない場所で初期化されます)(FR#1997)。:=グループ別は、すべてのタイプと組み合わせることができるiため、グループ別には、:=によるグループ化と。によるグループ化が含まibyます。グループ別は参照によるものであるため、(大きな)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タグを参照?":="して検索してください

于 2012-09-27T14:06:15.573 に答える