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