我在尝试使用 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]
我在尝试使用 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]
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
是表示在原始数据集 DT
中 E
的行号的向量。
2)
DT[J("E") , .I] # [1] 1 2 3
DT["E" , .I] # [1] 1 2 3
DT[x == "E", .I] # [1] 1 2 3
它们都是相同的,生成一个向量,其中.I
是表示E
在新的子集数据中行号的向量。