conditionalFilter
Syntax
conditionalFilter(X, condition, filterMap)
Arguments
X is a scalar/vector.
condition is a scalar or a vector of the same length as X.
filterMap is a dictionary indicating the filtering conditions
Details
Return true if both of the following conditions are satisfied, otherwise return false.
An element in the vector condition is a key to the dictionary filterMap
The corresponding element in X is one of the elements of the key’s value in the dictionary filterMap
If both X and condition are vectors, the result is a vector of the same length as X.
Examples
Example 1:
$ conditionalFilter(1 2 3,`a`b`c, dict(`a`b,1 2));
[1,1,0]
$ conditionalFilter(1 2 3,`a`b`b, dict(`a`b,[1 2,3 4]))
[1,0,1]
Example 2:
Get the specified stocks in the specified dates from table t:
2012.06.01: C, MS 2012.06.02: IBM, MS 2012.06.03: MS 2012.06.04: IBM
$ sym = `C`MS`MS`MS`IBM`IBM`C`C`C$SYMBOL
$ date = 2012.06.01 2012.06.01 2012.06.02 2012.06.03 2012.06.01 2012.06.02 2012.06.02 2012.06.03 2012.06.04
$ price = 49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29
$ qty = 2200 1900 2100 3200 6800 5400 1300 2500 8800
$ t = table(sym, date, price, qty)
$ t;
sym |
date |
price |
qty |
---|---|---|---|
C |
2012.06.01 |
49.60 |
2200 |
MS |
2012.06.01 |
29.46 |
1900 |
MS |
2012.06.02 |
29.52 |
2100 |
MS |
2012.06.03 |
30.02 |
3200 |
IBM |
2012.06.01 |
174.97 |
6800 |
IBM |
2012.06.02 |
175.23 |
5400 |
C |
2012.06.02 |
50.76 |
1300 |
C |
2012.06.03 |
50.32 |
2500 |
C |
2012.06.04 |
51.29 |
8800 |
$ filter = dict(2012.06.01..2012.06.04, [`C`MS, `IBM`MS, `MS, `IBM])
$ select * from t where conditionalFilter(sym, date, filter) order by date, sym;
sym |
date |
price |
qty |
---|---|---|---|
C |
2012.06.01 |
49.6 |
2200 |
MS |
2012.06.01 |
29.46 |
1900 |
IBM |
2012.06.02 |
175.23 |
5400 |
MS |
2012.06.02 |
29.52 |
2100 |
MS |
2012.06.03 |
30.02 |
3200 |
Example 3:
The values of filterMap can also be pairs:
$ t=table(`aaa`aaa`bbb`bbb as id, 2020.09.03 2020.09.10 2020.09.06 2020.09.09 as date)
$ t
id |
date |
---|---|
aaa |
2020.09.03 |
aaa |
2020.09.10 |
bbb |
2020.09.06 |
bbb |
2020.09.09 |
$ mydict = dict(`aaa`bbb, [2020.09.01 : 2020.09.09, 2020.09.05 : 2020.09.09])
$ select * from t where conditionalFilter(date, id, mydict);
id |
date |
---|---|
aaa |
2020.09.03 |
bbb |
2020.09.06 |
bbb |
2020.09.09 |