1 功能说明
# stack函数会将数据从”表格结构“变成”花括号结构“,即将其行索引变成列索引,反之,unstack函数将数据从”花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引
# 1.stack: 将数据的列索引转换为行索引(列索引可以简单理解为列名)
# 2.unstack:将数据的行索引转换为列索引
# 3.stack和unstack默认操作为最内层,可以用level参数指定操作层.
# 4.stack和unstack默认旋转轴的级别将会成果结果中的最低级别(最内层)
# 5.stack转换dataframe时,若只有一层列索引则转换后的类型为series,否则为dataframe
2、代码样例
using DataFrames # load package
x = DataFrame(id=[1,2,3,4], id2=[1,1,2,2], M1=[11,12,13,14], M2=[111,112,113,114],M3=[111,112,113,114])
stack(x, [:M1, :M2], :id) # first pass measure variables and then id-variable
stack(x, [:M1, :M2,:id2], [:id,:M3], variable_name=:key, value_name=:observed)
stack(x, Not([:id, :id2]))
stack(x, Not([1, 2])) # you can use index instead of symbol
x = DataFrame(id = [1,1,1], id2=['a','b','c'], a1 = rand(3), a2 = rand(3))
stack(x)
stack(DataFrame(rand(3,2)))
df = DataFrame(rand(3,2))
df.key = [1,1,1]
mdf = stack(df) # duplicates in key are silently accepted
x = DataFrame(id = [1,1,1], id2=['a','b','c'], a1 = rand(3), a2 = rand(3))
y = stack(x)
unstack(y, :id2, :variable, :value) # stndard unstack with a specified key
unstack(y, :variable, :value) # all other columns are treated as keys
# all columns other than named :variable and :value are treated as keys
unstack(y)