web-dev-qa-db-ja.com

Rのdata.tableで.SDが表すもの

.SDは便利に見えますが、私はそれで何をしているのか本当にわかりません。それは何の略ですか?前の期間があるのはなぜですか(完全停止)。使用するとどうなりますか?

.SDは、グループ列を除く各グループのxのデータのサブセットを含むdata.tableです。これは、iによるグループ化、by、キー付きby、および_ad hoc_ byによるグループ化時に使用できます

それは、娘data.tablesが次の操作のためにメモリに保持されることを意味しますか?

157
Farrel

.SDは、「Sata.tableのDubset」のようなものを表します。最初の"."に意味はありませんが、ユーザー定義の列名と衝突する可能性はさらに低くなります。

これが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で結果を返します。

188
Josh O'Brien

.SDについてMatt Dowleと話した後、これについてのビデオを作りました。YouTubeで見ることができます。 https://www.youtube.com/watch?v=DwEzQuYfMsI

1
Sharon