サーチ…


備考

注意: DT[where, select|update|do, by]構文は、data.tableの列を操作するために使用されます。

  • "where"部分がi引数です。
  • "select | update | do"部分はj引数です

これらの2つの引数は、通常、名前ではなく位置によって渡されます。

各グループ内の行の選択

# example data
DT <- data.table(Titanic)

各性別について、生存数が最も高い行が必要であるとします。

DT[Survived == "Yes", .SD[ N == max(N) ], by=Sex]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

.SDは各Sex関連するデータのサブセットです。これをさらに条件設定の行にサブセット化しています。スピードが重要な場合は、代わりにSODのeddiが提案するアプローチを使用してください

DT[ DT[Survived == "Yes", .I[ N == max(N) ], by=Sex]$V1 ]

#    Class    Sex   Age Survived   N
# 1:  Crew   Male Adult      Yes 192
# 2:   1st Female Adult      Yes 140

落とし穴

コードの最後の行では、 .Iは完全なdata.tableの行番号を参照します。しかし、 何も存在しないとき、これは真実ではないby

DT[ Survived == "Yes", .I]

# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16

DT[ Survived == "Yes", .I, by=Sex]$I

# 17 18 19 20 25 26 27 28 21 22 23 24 29 30 31 32

グループの選択

# example data
DT = data.table(Titanic)

2番目のクラスだけを見たいとします。

DT[ Class == "2nd" ]

#    Class    Sex   Age Survived   N
# 1:   2nd   Male Child       No   0
# 2:   2nd Female Child       No   0
# 3:   2nd   Male Adult       No 154
# 4:   2nd Female Adult       No  13
# 5:   2nd   Male Child      Yes  11
# 6:   2nd Female Child      Yes  13
# 7:   2nd   Male Adult      Yes  14
# 8:   2nd Female Adult      Yes  80

ここでは、 i 、where句を使用してデータを単純にサブセット化します。

条件でグループを選択する

# example data
DT = data.table(Titanic)

大多数が生き残った場合にのみ各クラスを見たいとします。

DT[, if (sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) .SD, by=Class]

#    Class    Sex   Age Survived   N
# 1:   1st   Male Child       No   0
# 2:   1st Female Child       No   0
# 3:   1st   Male Adult       No 118
# 4:   1st Female Adult       No   4
# 5:   1st   Male Child      Yes   5
# 6:   1st Female Child      Yes   1
# 7:   1st   Male Adult      Yes  57
# 8:   1st Female Adult      Yes 140

ここでは、条件が満たされている場合に限り、データ.SDのサブセットを返します。代わりに

DT[, .SD[ sum(N[Survived=="Yes"]) > sum(N[Survived=="No"]) ) ], by=Class]

しかしこれは時々より遅いことが判明しています。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow