.SD
は便利に見えますが、私はそれで何をしているのか本当にわかりません。それは何の略ですか?前の期間があるのはなぜですか(完全停止)。使用するとどうなりますか?
.SD
は、グループ列を除く各グループのx
のデータのサブセットを含むdata.table
です。これは、i
によるグループ化、by
、キー付きby
、および_ad hoc_ by
によるグループ化時に使用できます
それは、娘data.table
sが次の操作のためにメモリに保持されることを意味しますか?
.SD
は、「S
ata.tableのD
ubset」のようなものを表します。最初の"."
に意味はありませんが、ユーザー定義の列名と衝突する可能性はさらに低くなります。
これがdata.tableの場合:
DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6)
setkey(DT, y)
DT
# x y v
# 1: a 1 1
# 2: b 1 3
# 3: c 1 5
# 4: a 3 2
# 5: b 3 4
# 6: c 3 6
これを行うと、役立つ場合がありますsee.SD
とは:
DT[ , .SD[ , paste(x, v, sep="", collapse="_")], by=y]
# y V1
# 1: 1 a1_b3_c5
# 2: 3 a2_b4_c6
基本的に、by=y
ステートメントは、元のdata.tableをこれら2つのサブdata.tables
に分割します。
DT[ , print(.SD), by=y]
# <1st sub-data.table, called '.SD' while it's being operated on>
# x v
# 1: a 1
# 2: b 3
# 3: c 5
# <2nd sub-data.table, ALSO called '.SD' while it's being operated on>
# x v
# 1: a 2
# 2: b 4
# 3: c 6
# <final output, since print() doesn't return anything>
# Empty data.table (0 rows) of 1 col: y
順番に操作します。
いずれかで動作している間は、ニックネーム/ハンドル/シンボルdata.table
を使用して、現在のサブ.SD
を参照できます。 .SD
という単一のdata.tableを操作するコマンドラインに座っているかのように列にアクセスして操作できるので、非常に便利です。ただし、ここでは、data.table
がすべてのサブdata.table
は、キーの組み合わせによって定義され、それらを「貼り付けて」戻し、単一のdata.table
で結果を返します。
.SDについてMatt Dowleと話した後、これについてのビデオを作りました。YouTubeで見ることができます。 https://www.youtube.com/watch?v=DwEzQuYfMsI