web-dev-qa-db-ja.com

Rのdata.tableの.Iを理解する

_data.table_で遊んでいたのですが、よくわからないという違いに出くわしました。次のデータセットがあるとします。

_library(data.table)

set.seed(400)
DT <- data.table(x = sample(LETTERS[1:5], 20, TRUE), key = "x"); DT
_

次の表現の違いを教えてください。

1)DT[J("E"), .I]

2)_DT[ , .I[x == "E"] ]_

3)_DT[x == "E", .I]_

24
black_sheep07
set.seed(400)
library(data.table)

DT <- data.table(x = sample(LETTERS[1:5], 20, TRUE), key = "x"); DT

1)

DT[  , .I[x == "E"] ] # [1] 18 19 20

はdata.tableであり、.Iは、元のデータセットEDTの行番号を表すベクトルです。

2)

DT[J("E")  , .I]   # [1] 1 2 3

DT["E"     , .I]   # [1] 1 2 3

DT[x == "E", .I]   # [1] 1 2 3

はすべて同じで、.Isは、新しいサブセット化されたデータのEsの行番号を表すベクトルです。

30
Ragy Isaac