##索引与键值 ###使用setkey()函数设置键值 ·setkey()·函数可以在数据集DT上设置键值。当我们设置好key后,data.table会将数据按照key来排序。 在V2列上设置一个键值
> setkey(DT,V2)
无显示返回结果 ###使用键值来选择行 使用键值可以更加有效地选择行 由于已将V2设置了键值,将会返回该列中所有包含变量值A的行
> DT["A"]
V1 V2 V3 V4
1: 1 A -1.1727 1
2: 2 A 0.6651 4
3: 1 A -1.0604 7
4: 2 A -0.3825 10
返回键值所在列(V2列)包含变量值A或变量值C的所有行
> DT[c("A","C")]
V1 V2 V3 V4
1: 1 A -0.8981 1
2: 2 A -0.1745 4
3: 1 A -0.5014 7
4: 2 A -0.3348 10
5: 1 C -0.5014 3
6: 2 C -0.3348 6
7: 1 C -0.8981 9
8: 2 C -0.1745 12
###mult参数 mult参数是用来控制i匹配到的哪一行的返回结果默认情况下会返回该分组的所有元素 返回匹配到键值所在列(V2列)所有行中的第一行
> DT["A", mult ="first"]
V1 V2 V3 V4
1: 1 A -1.1727 1
返回匹配到键值所在列(V2列)所有行中的最后一行
> DT["A", mult = "last"]
V1 V2 V3 V4
1: 2 A -0.3825 10
###nomatch参数
nomatch参数用于控制,当在i中没有到匹配数据的返回结果,默认为NA,也能设定为0。0意味着对于没有匹配到的行将不会返回。 返回匹配到键值所在列(V2列)所有包含变量值A或D的所有行:
> DT[c("A","D")]
V1 V2 V3 V4
1: 1 A -1.1727 1
2: 2 A 0.6651 4
3: 1 A -1.0604 7
4: 2 A -0.3825 10
5: NA D NA NA
变量值A匹配到了,而变量值D没有,故返回NA。 返回匹配到键值所在列(V2列)所有包含值A或D的所有行:
> DT[c("A","D"), nomatch = 0]
V1 V2 V3 V4
1: 1 A -1.1727 1
2: 2 A 0.6651 4
3: 1 A -1.0604 7
4: 2 A -0.3825 10
因为nomatch参数,值D没有匹配到故不返回。
###by=.EACHI参数
by=.EACHI
允许按每一个已知i的子集分组,在使用by=.EACHI时需要设置键值
返回键值(V2列)中包含A或C的所有行中,V4列的总和。
> DT[c("A","C"),
sum(V4)]
[1] 52
返回键值所在列(V2列)中包含A的行在V4列总和与包含C的行在V4列的总和。
> DT[c("A","C"),
sum(V4), by=.EACHI]
V2 V1
1: A 22
2: C 30
###使用setkey()设置主键 任意列都能使用setkey()来设置主键,这种方式行可以选择2个主键,这是一个等值连接 V1列的每个组先根据V1排序,再根据V2排序。
> setkey(DT,V1,V2)
无显式返回结果
选择键值1(V1列)为2且键值2(V2列)为C的行。
> DT[.(2,"C")]
V1 V2 V3 V4
1: 2 C -0.3825 6
2: 2 C 0.6651 12
选择键值1(V1列)为2且键值2(V2列)为A或C的行
> DT[.(2,c("A","C"))]
V1 V2 V3 V4
1: 2 A 0.6651 4
2: 2 A -0.3825 10
3: 2 C -0.3825 6
4: 2 C 0.6651 12