r - R中data.table中的.SD代表什么

标签 r data.table

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

我读到: .SD 是一个 data.table,其中包含每个组的 x 数据的子集,不包括组列。当按 i 分组、按 by 分组、键控 by 和 _ad hoc_ by< 时可以使用它。/em>

这是否意味着子 data.table 已保存在内存中以供下一次操作?

最佳答案

.SD 代表“SData.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语句将原始data.table分成这两个子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来引用当前的子data.table。这非常方便,因为您可以访问和操作列,就像您坐在命令行中处理名为 .SD 的单个 data.table 一样......除了这里, data.table 将对由键组合定义的每个子data.table 执行这些操作,将它们“粘贴”回一起并在单个 中返回结果数据表!

关于r - R中data.table中的.SD代表什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508482/

相关文章:

R-如何获取cutree组之间的关系?

用于符号回归的 R 包

r - 自定义背景以突出显示ggplot中的数据范围

r - 使用reactivePoll 累积数据输出

r - 在 data.table 中按组绘制

r - 使用 R data.table 计算所有变量组合和 df 的不同计数

r - 连续乘以同一列上一个值

r - 使用成对的相关列(dplyr、tidyr、data.table)

R的data.table找不到函数 "."

r - 根据另一个数据表的多个列值对一个数据表上的行进行子集化