Skip to content

Latest commit

 

History

History
103 lines (98 loc) · 2.08 KB

7.md

File metadata and controls

103 lines (98 loc) · 2.08 KB

data.table高级操作

###.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

.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

结果与上一个是相同的。