unpivot

语法

unpivot(obj, keyColNames, valueColNames, [func])

参数

obj 是一个表。

keyColNames 是表示列名的标量或向量,用于指定要在输出表中保留的列。

valueColNames 是一个列名向量。valueColNames 中的数据将转换成一列。 请注意 valueColNames 各列的数据类型应一致。

func 是一个函数。如果指定了 func 函数,该函数将会应用到 valueColNames 上,再将其合并。

详情

把多列的数据转换成一列。

返回一个表,列顺序为 keyColNames 指定的列,valueType 列和 value 列。其中,valueType 列为 valueColNames 的列名,value 列为 valueColNames 中各列的值。若指定了 func 函数,value 列为 func 函数应用于 valueColNames 中各列的结果。

例子

$ 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