unpivot
Syntax
unpivot(obj, keyColNames, valueColNames, [func])
Arguments
obj is a table.
keyColNames is a string scalar/vector indicating column name(s).
valueColNames is a vector of column names. The specified columns will be converted into a single column. Note the values in these columns must have the same data type.
func is an optional parameter indicating a function that is applied to valueColNames before they’re converted into one column.
Details
Convert the columns specified by valueColNames into a single column. Return a table with columns arranged in the following order: the columns specified by keyColNames, the “valueType” column, and the “value” column. “valueType” holds the column names specified by valueColNames and “value” holds the corresponding values of these columns. If func is specified, “value” holds the results of func applied on the columns specified by valueColNames.
Examples
$ t=table(1..3 as id, 2010.01.01 + 1..3 as time, 4..6 as col1, 7..9 as col2, 10..12 as col3, `aaa`bbb`ccc as col4, `ddd`eee`fff as col5, 'a' 'b' 'c' as col6);
$ t;
id |
time |
col1 |
col2 |
col3 |
col4 |
col5 |
col6 |
---|---|---|---|---|---|---|---|
1 |
2010.01.02 |
4 |
7 |
10 |
aaa |
ddd |
‘a’ |
2 |
2010.01.03 |
5 |
8 |
11 |
bbb |
eee |
‘b’ |
3 |
2010.01.04 |
6 |
9 |
12 |
ccc |
fff |
‘c’ |
$ t.unpivot(`id, `col1`col2);
id |
valueType |
value |
---|---|---|
1 |
col1 |
4 |
2 |
col1 |
5 |
3 |
col1 |
6 |
1 |
col2 |
7 |
2 |
col2 |
8 |
3 |
col2 |
9 |
$ f = def(x): x.split("col")[1];
$ t.unpivot(`id, `col1`col2, f);
id |
valueType |
value |
---|---|---|
1 |
1 |
4 |
2 |
1 |
5 |
3 |
1 |
6 |
2 |
2 |
8 |
3 |
2 |
9 |
$ t.unpivot(, `col1`col2);
valueType |
value |
---|---|
col1 |
4 |
col1 |
5 |
col1 |
6 |
col2 |
7 |
col2 |
8 |
col2 |
9 |
$ f = def(x): x.regexReplace("col", "var")
$ t.unpivot(`id, `col1`col2`col3, f);
id |
valueType |
value |
---|---|---|
1 |
var1 |
4 |
2 |
var1 |
5 |
3 |
var1 |
6 |
1 |
var2 |
7 |
2 |
var2 |
8 |
3 |
var2 |
9 |
1 |
var3 |
10 |
2 |
var3 |
11 |
3 |
var3 |
12 |
$ t.unpivot(`time, `col4`col5)
time |
valueType |
value |
---|---|---|
2010.01.02 |
col4 |
aaa |
2010.01.03 |
col4 |
bbb |
2010.01.04 |
col4 |
ccc |
2010.01.02 |
col5 |
ddd |
2010.01.03 |
col5 |
eee |
2010.01.04 |
col5 |
fff |
$ t = table(1..3 as id, 2010.01.01 + 1..3 as time, 8.1 9.2 11.3 as bid1, 12.4 11.1 10.5 as bid2, 10.1 10.2 10.3 as bid3, 10.1 10.2 10.3 as bid4, 10.1 11.2 9.3 as bid5, 7.7 8.2 10.5 as ask1, 11.4 10.1 9.5 as ask2, 9.6 9.2 11.3 as ask3, 12.1 7.2 8.3 as ask4, 10.1 12.5 8.9 as ask5);
$ t;
$ t1 = t.unpivot(`id`time, `bid1`bid2`bid3`bid4`bid5);
$ t2 = t.unpivot(, `ask1`ask2`ask3`ask4`ask5);
$ re = rename!(t1, `valueType`value, `bid_type`bid_value) join rename!(t2, `valueType`value, `ask_type`ask_value)
$ re;
id |
time |
bid_type |
bid_value |
ask_type |
ask_value |
---|---|---|---|---|---|
1 |
2010.01.02 |
bid1 |
8.1 |
ask1 |
8.1 |
2 |
2010.01.03 |
bid1 |
9.2 |
ask1 |
9.2 |
3 |
2010.01.04 |
bid1 |
11.3 |
ask1 |
11.3 |
1 |
2010.01.02 |
bid2 |
12.4 |
ask2 |
12.4 |
2 |
2010.01.03 |
bid2 |
11.1 |
ask2 |
11.1 |
3 |
2010.01.04 |
bid2 |
10.5 |
ask2 |
10.5 |
1 |
2010.01.02 |
bid3 |
10.1 |
ask3 |
10.1 |
2 |
2010.01.03 |
bid3 |
10.2 |
ask3 |
10.2 |
3 |
2010.01.04 |
bid3 |
10.3 |
ask3 |
10.3 |
1 |
2010.01.02 |
bid4 |
10.1 |
ask4 |
10.1 |
2 |
2010.01.03 |
bid4 |
10.2 |
ask4 |
10.2 |
3 |
2010.01.04 |
bid4 |
10.3 |
ask4 |
10.3 |
1 |
2010.01.02 |
bid5 |
10.1 |
ask5 |
10.1 |
2 |
2010.01.03 |
bid5 |
11.2 |
ask5 |
11.2 |
3 |
2010.01.04 |
bid5 |
9.3 |
ask5 |
9.3 |