loc
Syntax
loc(obj, rowFilter, [colFilter], [view=false])
Arguments
obj is a matrix object. It can be a standard matrix, an indexed series or an indexed matrix.
rowFilter/colFilter can be:
a Boolean vector - the rows/columns marked as true will be returned. The length of the vector must match the number of rows/columns of obj.
a scalar, a vector or a pair whose data type is compatible with the row/column labels of obj. A pair indicates the selection range (both upper bound and lower bound are inclusive).
Note:
If rowFilter/colFilter is a pair, then obj must be an indexed series or an indexed matrix.
- Data type compatibility rules:
INT, SHORT, LONG and CHAR are compatible
FLOAT and DOUBLE are compatible
STRING and SYMBOL are compatible
view is a Boolean value. The default value is false indicating the result will be a copy of the original matrix (deep copy). If set to true, the result will be a view on the original matrix (shallow copy) and changes made to the original matrix will be reflected in the view.
Details
Access a group of rows and columns of a matrix by label(s) or a boolean vector. Return a copy or a view of the original matrix.
Examples
$ m=rand(12, 3:4)
$ m;
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
3 |
10 |
6 |
5 |
4 |
11 |
6 |
0 |
7 |
2 |
1 |
8 |
$ a = m.loc(colFilter=[true, true, true, false], view=true)
$ b = m.loc(colFilter=[true, true, true, false], view=false)
$ a;
col1 |
col2 |
col3 |
---|---|---|
3 |
10 |
6 |
4 |
11 |
6 |
7 |
2 |
1 |
$ b;
col1 |
col2 |
col3 |
---|---|---|
3 |
10 |
6 |
4 |
11 |
6 |
7 |
2 |
1 |
// a view reflects changes made to the original matrix whereas a copy doesn't
$ m[0,0] = -1
$ a;
col1 |
col2 |
col3 |
---|---|---|
-1 |
10 |
6 |
4 |
11 |
6 |
7 |
2 |
1 |
$ b;
col1 |
col2 |
col3 |
---|---|---|
3 |
10 |
6 |
4 |
11 |
6 |
7 |
2 |
1 |
$ m = rand(48, 6:8)
$ m;
col1 |
col2 |
col3 |
col4 |
col5 |
col6 |
col7 |
col8 |
---|---|---|---|---|---|---|---|
27 |
31 |
47 |
21 |
12 |
43 |
22 |
11 |
3 |
20 |
13 |
37 |
3 |
46 |
27 |
27 |
13 |
5 |
14 |
11 |
26 |
42 |
4 |
18 |
45 |
9 |
31 |
33 |
12 |
19 |
42 |
17 |
2 |
19 |
30 |
25 |
36 |
27 |
21 |
6 |
9 |
36 |
15 |
10 |
29 |
37 |
31 |
42 |
// filter with Boolean values
$ m.loc(rowFilter=[true, true, false, false, true, false])
col1 |
col2 |
col3 |
col4 |
col5 |
col6 |
col7 |
col8 |
---|---|---|---|---|---|---|---|
27 |
31 |
47 |
21 |
12 |
43 |
22 |
11 |
3 |
20 |
13 |
37 |
3 |
46 |
27 |
27 |
2 |
19 |
30 |
25 |
36 |
27 |
21 |
6 |
$ m.loc(colFilter=[true, true, false, false, true, false, false, true])
col1 |
col2 |
col3 |
col4 |
---|---|---|---|
27 |
31 |
12 |
11 |
3 |
20 |
3 |
27 |
13 |
5 |
26 |
18 |
45 |
9 |
12 |
17 |
2 |
19 |
36 |
6 |
9 |
36 |
29 |
42 |
// filter with labels
$ m.rename!(`A`A`B`A`B`B, 2022.01.01 + 0..7)
$ m;
label |
2022.01.01 |
2022.01.02 |
2022.01.03 |
2022.01.04 |
2022.01.05 |
2022.01.06 |
2022.01.07 |
2022.01.08 |
---|---|---|---|---|---|---|---|---|
A |
27 |
31 |
47 |
21 |
12 |
43 |
22 |
11 |
A |
3 |
20 |
13 |
37 |
3 |
46 |
27 |
27 |
B |
13 |
5 |
14 |
11 |
26 |
42 |
4 |
18 |
A |
45 |
9 |
31 |
33 |
12 |
19 |
42 |
17 |
B |
2 |
19 |
30 |
25 |
36 |
27 |
21 |
6 |
B |
9 |
36 |
15 |
10 |
29 |
37 |
31 |
42 |
$ m.loc(rowFilter=`A);
label |
2022.01.01 |
2022.01.02 |
2022.01.03 |
2022.01.04 |
2022.01.05 |
2022.01.06 |
2022.01.07 |
2022.01.08 |
---|---|---|---|---|---|---|---|---|
A |
27 |
31 |
47 |
21 |
12 |
43 |
22 |
11 |
A |
3 |
20 |
13 |
37 |
3 |
46 |
27 |
27 |
A |
45 |
9 |
31 |
33 |
12 |
19 |
42 |
17 |
$ m.loc(colFilter=2022.01.02);
label |
2022.01.02 |
---|---|
A |
31 |
A |
20 |
B |
5 |
A |
9 |
B |
19 |
B |
36 |
$ m.loc(rowFilter=`B, colFilter=2022.01.03)
label |
2022.01.03 |
---|---|
B |
14 |
B |
30 |
B |
15 |
Related function: at