1. ホーム
  2. r

[解決済み] .EACHIをdata.tableに入れるか?

2022-02-19 07:07:55

質問

に関するドキュメントが見当たりません。 .EACHI の中で data.table . ドキュメントに簡単に書かれていますね。

既知のグループのサブセットに対する集計は、特に効率的です。 i でそれらのグループを渡して by=.EACHI . このとき i は data.tableを使用します。 DT[i,j,by=.EACHI]j のグループに対して DT その の各行が i に結合する。これを各iでグループ化すると呼ぶ。

しかし、quot;groups" の文脈ではどうなっているのでしょうか。 DT とはどういう意味でしょうか?グループは DT ? グループは、すべての列をキーとして使用する個別の行ごとなのでしょうか?私は、以下のような実行方法を完全に理解しています。 DT[i,j,by=my_grouping_variable] が、どのように .EACHI は動作します。どなたか説明してください。

どのように解決するのですか?

これをリストに追加しました こちら . そして、予定通り納品できることを祈っています。


その理由は、最も可能性が高いのは by=.EACHI は最近の機能です(1.9.4以降)。 しかし、その内容は . 例を挙げて説明しましょう。2つのdata.tablesがあるとします XY :

X = data.table(x = c(1,1,1,2,2,5,6), y = 1:7, key = "x")
Y = data.table(x = c(2,6), z = letters[2:1], key = "x")

することで結合できることが分かっています。 X[Y] に似ています。 サブセット の操作ですが data.tables (整数/行名や論理値の代わりに)。の各行に対して Y を取ると Y のキーカラムに対応する行を検索して返します。 X のキーカラム(+カラムは Y ) .

X[Y]
#    x y z
# 1: 2 4 b
# 2: 2 5 b
# 3: 6 7 a

では、次のようにします。 Y のキーカラム (ここではキーカラムはひとつだけ) から カウント でのマッチの X . のバージョンでは data.table < 1.9.4 を指定することで、このようなことが可能になります。 .Nj を次のようにします。

# < 1.9.4
X[Y, .N]
#    x N
# 1: 2 2
# 2: 6 1

これは何 暗黙のうちに が存在する場合、以下のようになります。 j を評価します。 j-expression のマッチした各結果に対して X (の行に対応する)。 Y ). これは バイ・ウィズ・アウト・バイ または 暗黙のバイ というのは、あたかもhidden byがあるかのように見えるからです。

問題は、これでは常に by 演算が必要です。ですから、もし結合後の行数を知りたかったら、こうしなければなりません。 X[Y][ .N] (または単に nrow(X[Y]) この場合)。つまり j を必要としない場合は、同じ呼び出しの中で by-without-by . その結果、例えば X[Y, list(z)] と評価されます。 list(z) を使って by-without-by となり、若干遅くなった。

さらに data.table にしてほしいという要望がありました。 明示的 - 参照 これ これ をクリックすると、コンテキストが表示されます。

したがって by=.EACHI が追加されました。さて、そうすると

X[Y, .N]
# [1] 3

は、それが意図していることを実行します(混乱を避ける)。これは結合の結果得られる行の数を返します。

そして

X[Y, .N, by=.EACHI]

を評価します。 j の各行について、一致する行に - 式を適用します。 Y (の値に対応する)。 Y のキーカラムはここにある)。これを見るには which=TRUE .

X[.(2), which=TRUE] # [1] 4 5
X[.(6), which=TRUE] # [1] 7

を実行すると .N をそれぞれ実行すると、2,1が得られるはずです。

X[Y, .N, by=.EACHI]
#    x N
# 1: 2 2
# 2: 6 1

これで、両方の機能が使えるようになりました。これがお役に立てば幸いです。