R在data.table中代表什么?

.SD看起来很有用,但我真的不知道我在做什么。 它代表什么? 为什么有一个前期(句号)。 当我使用它时发生了什么?

我读到: .SD是一个data.table其中包含每个组的x数据的子集,不包括组列。 它可以用于分组时, i分组时,键入和_ad hoc_ by

这是否意味着女儿的data.table被保存在内存中以便下一次操作?

.SD代表“ D ata.table”。 这对最初的"."没有意义"." ,除了使用户定义的列名冲突更不可能。

如果这是你的data.table:

 DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6) setkey(DT, y) DT # xyv # 1: a 1 1 # 2: b 1 3 # 3: c 1 5 # 4: a 3 2 # 5: b 3 4 # 6: c 3 6 

这样做可以帮助你看到什么.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分解成这两个子数据data.tables

 DT[ , print(.SD), by=y] # <1st sub-data.table, called '.SD' while it's being operated on> # xv # 1: a 1 # 2: b 3 # 3: c 5 # <2nd sub-data.table, ALSO called '.SD' while it's being operated on> # xv # 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 

并依次对其进行操作。

当它在任一个上运行时,它可以让你使用nick-name / handle / symbol .SD引用当前的子.SD 。 这是非常方便的,因为您可以访问和操作列,就像您坐在命令行中一样使用一个名为.SD …除了在这里data.table将执行这些操作单个子data.table由键的组合定义,“粘贴”到一起,并返回结果在一个单一的data.table