Skip to content

Latest commit

 

History

History
110 lines (108 loc) · 2.77 KB

6.md

File metadata and controls

110 lines (108 loc) · 2.77 KB

##索引与键值 ###使用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