###.N
.N可以用来表示行的数量或者最后一行
在i处使用:
> DT[.N-1]
V1 V2 V3 V4
1: 1 B -0.5765 11
返回每一列的倒数第二行 在j处使用:
> DT[,.N-1]
[1] 11
返回倒数第二行所在的行数。
.()
是list()
的一个别名,他们在data.table中是等价的。当只有一个元素的位置j或者by中,是不需要.()
的。
在j中使用:
> DT[,.(V2,V3)] #or DT[,list(V2,V3)]
V2 V3
1: A -0.8313
2: B 0.7615
3: C -0.5765
在by中使用:
> DT[, mean(V3),by=.(V1,V2)]
V1 V2 V1
1: 1 A -0.70390
2: 2 B 0.06755
3: 1 C -0.70390
4: 2 A 0.06755
5: 1 B -0.70390
6: 2 C 0.06755
以V1,V2为分组,对V3求均值
###.SD参数
.SD
是一个data.table,他包含了各个分组,除了by中的变量,的所有元素。.SD
只能在位置j中使用:
> DT[, print(.SD), by=V2]
V1 V3 V4
1: 1 -0.8313 1
2: 2 -0.6264 4
3: 1 -0.5765 7
4: 2 0.7615 10
V1 V3 V4
1: 2 0.7615 2
2: 1 -0.8313 5
3: 2 -0.6264 8
4: 1 -0.5765 11
V1 V3 V4
1: 1 -0.5765 3
2: 2 0.7615 6
3: 1 -0.8313 9
4: 2 -0.6264 12
Empty data.table (0 rows) of 1 col: V2
以V2为分组,选择每组的第一和最后一列:
> DT[,.SD[c(1,.N)], by=V2]
V2 V1 V3 V4
1: A 1 -0.8313 1
2: A 2 0.7615 10
3: B 2 0.7615 2
4: B 1 -0.5765 11
5: C 1 -0.5765 3
6: C 2 -0.6264 12
以V2为分组,计算.SD
中所有元素的和:
> DT[, lapply(.SD, sum), by=V2]
V2 V1 V3 V4
1: A 6 -1.2727 22
2: B 6 -1.2727 26
3: C 6 -1.2727 30
.SDcols
常于.SD
用在一起,他可以指定.SD
中所包含的列,也就是对.SD
取子集:
> DT[, lapply(.SD,sum), by=V2,
+ .SDcols = c("V3","V4")]
V2 V3 V4
1: A -1.2727 22
2: B -1.2727 26
3: C -1.2727 30
.SDcols
也可以是一个函数的返回值:
> DT[, lapply(.SD,sum), by=V2,
+ .SDcols = paste0("V",3:4)]
V2 V3 V4
1: A -1.2727 22
2: B -1.2727 26
3: C -1.2727 30
结果与上一个是相同的。