.SD
看起来很有用,但我真的不知道我在用它做什么.它代表什么?为什么会有前一个句号(句号).当我使用它时会发生什么?
我读到:
这是否意味着女儿data.table
s会被保存在内存中以备下次手术?
.SD
看起来很有用,但我真的不知道我在用它做什么.它代表什么?为什么会有前一个句号(句号).当我使用它时会发生什么?
我读到:
这是否意味着女儿data.table
s会被保存在内存中以备下次手术?
.SD
代表"S
ubset of D
ata.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
这样做可以帮助你了解.SD
是什么:
DT[ , .SD[ , paste(x, v, sep="", collapse="_")], by=y]
# y V1
# 1: 1 a1_b3_c5
# 2: 3 a2_b4_c6
基本上,by=y
语句会 destruct 原始数据.表分为这两个子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
然后依次对它们进行操作.
当它在任何一个上运行时,它允许您使用昵称/手柄/符号.SD
来引用当前sub-data.table
.这非常方便,因为您可以访问和操作列,就像您坐在命令行上处理单个数据一样.名为.SD
的桌子...除此之外,data.table
将对每一个由组合键定义的sub-data.table
执行这些操作,"粘贴"它们并在单个data.table
中返回结果!